当前位置:   article > 正文

HarmonyOS开发:file_operation图库工具_鸿蒙downloadfile()下载到图库

鸿蒙downloadfile()下载到图库

 简介

file_operation是鸿蒙开发的组件库,支持图片上传、支持拉起图库进行图片视频上传;支持文件上传、支持拉起文件管理进行文件上传;根据文件url地址下载文件到真机上

下载安装

ohpm install @ibestservices/file_operation

需要权限

ohos.permission.INTERNET ohos.permission.READ_MEDIA ohos.permission.WRITE_MEDIA

权限配置

1、配置在module.json5文件中

  1. {
  2. "module": {
  3. "name": "entry",
  4. "type": "entry",
  5. "description": "$string:module_desc",
  6. "mainElement": "EntryAbility",
  7. "deviceTypes": [
  8. "phone",
  9. "tablet"
  10. ],
  11. "requestPermissions": [
  12. {
  13. "name": "ohos.permission.INTERNET"
  14. },
  15. {
  16. "name": "ohos.permission.READ_MEDIA"
  17. },
  18. {
  19. "name": "ohos.permission.WRITE_MEDIA"
  20. }
  21. ],
  22. "deliveryWithInstall": true,
  23. "installationFree": false,
  24. "pages": "$profile:main_pages",
  25. "abilities": [
  26. {
  27. "name": "EntryAbility",
  28. "srcEntry": "./ets/entryability/EntryAbility.ts",
  29. "description": "$string:EntryAbility_desc",
  30. "icon": "$media:icon",
  31. "label": "$string:EntryAbility_label",
  32. "startWindowIcon": "$media:icon",
  33. "startWindowBackground": "$color:start_window_background",
  34. "exported": true,
  35. "skills": [
  36. {
  37. "entities": [
  38. "entity.system.home"
  39. ],
  40. "actions": [
  41. "action.system.home"
  42. ]
  43. }
  44. ]
  45. }
  46. ]
  47. }
  48. }

点击领取→纯血版全套鸿蒙HarmonyOS学习资料(安全链接,放心点击希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取~
引入

import { FileUtil } from '@ibestservices/file_operation'
import FileModel from '@ibestservices/file_operation/src/main/ets/components/model/FileModel'
import UploadConfigModel from '@ibestservices/file_operation/src/main/ets/components/model/UploadConfigModel'

开源协议

本项目基于 Apache License 2.0,请自由地享受和参与开源。

使用组件案例

  1. import { FileUtil } from '@ibestservices/file_operation'
  2. import FileModel from '@ibestservices/file_operation/src/main/ets/components/model/FileModel';
  3. import UploadConfigModel from '@ibestservices/file_operation/src/main/ets/components/model/UploadConfigModel';
  4. import util from '@ohos.util';
  5. import prompt from '@ohos.prompt';
  6. @Entry
  7. @Component
  8. struct Index {
  9. /**
  10. * 上传文件信息
  11. */
  12. @State fileModel: FileModel = new FileModel();
  13. /**
  14. * 上传配置
  15. */
  16. @State uploadConfigModel: UploadConfigModel = new UploadConfigModel();
  17. /**
  18. * 上传图片:第一种方式
  19. */
  20. async uploadImage() {
  21. // 获取唯一文件id
  22. const fileId = util.generateRandomUUID(true)
  23. // 打开相册选择图片
  24. this.fileModel = await FileUtil.selectPicture();
  25. // 请求上传接口的方式
  26. this.uploadConfigModel.method = "接口请求方式"
  27. // 上传接口url
  28. this.uploadConfigModel.uploadUrl = "接口url"
  29. // 请求头,携带token等信息,根据自己业务来判断是否需要
  30. this.uploadConfigModel.header = {
  31. "Authorization": "token"
  32. }
  33. // 接口请求携带数据,默认是form-data,根据自己业务来判断是否需要
  34. this.uploadConfigModel.data = [
  35. {
  36. name: "fileId", value: fileId
  37. }
  38. , {
  39. name: "functionName", value: "EXPENSE"
  40. }, {
  41. name: "moduleName", value: "note"
  42. }
  43. ]
  44. // 上传
  45. const flag = await FileUtil.uploadFile(this.fileModel, this.uploadConfigModel)
  46. // 上传提示
  47. prompt.showToast({
  48. message: flag === true ? '上传成功' : '上传失败',
  49. duration: 2000
  50. })
  51. // 根据上传的文件id获取文件url,这块需要后端在上传接口的时候就需要将fileId跟url绑定,然后调用接口获取
  52. }
  53. /**
  54. * 上传图片:第二种方式
  55. */
  56. async uploadImageNew() {
  57. // 获取唯一文件id
  58. const fileId = util.generateRandomUUID(true)
  59. // 打开相册选择图片
  60. this.fileModel = await FileUtil.selectPicture();
  61. // 接口请求携带数据,默认是form-data
  62. const data = [
  63. {
  64. name: "fileId", value: fileId
  65. }
  66. , {
  67. name: "functionName", value: "EXPENSE"
  68. }, {
  69. name: "moduleName", value: "note"
  70. }
  71. ]
  72. // 上传
  73. const flag = await FileUtil.uploadFileNew(this.fileModel, data)
  74. // 上传提示
  75. prompt.showToast({
  76. message: flag === true ? '上传成功' : '上传失败',
  77. duration: 2000
  78. })
  79. // 根据上传的文件id获取文件url,这块需要后端在上传接口的时候就需要将fileId跟url绑定,然后调用接口获取
  80. }
  81. /**
  82. * 上传文件
  83. */
  84. async uploadFile() {
  85. // 获取唯一文件id
  86. const fileId = util.generateRandomUUID(true)
  87. // 选择文件
  88. this.fileModel = await FileUtil.selectFile();
  89. // 请求上传接口的方式
  90. this.uploadConfigModel.method = "POST"
  91. // 上传接口url
  92. this.uploadConfigModel.uploadUrl = "http://qxbuat.ibestservices.com/file_api/file/fileUrl/upload"
  93. // 请求头,携带token等信息,根据自己业务来判断是否需要
  94. this.uploadConfigModel.header = {
  95. "Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJoZmZhbiIsImdyb3VwSWQiOm51bGwsImRlcHRJZCI6NjA0LCJyb2xlQ29kZXMiOlsiZGFnbHkiLCJzd3p5IiwiQkRfSlNfMjAyMjEyMjMwMDIiLCJCRF9KU18yMDIzMDExNTAwMSIsImhyYnAiLCJCRF9KU18yMDIzMDMxNjAwMSIsInJwb196cHp5IiwicnNqbGwiLCJCRF9KU18yMDIzMDEzMTAwMSIsInpwenoiLCJCRF9KU18yMDIyMDkwMjAwNSIsIkJEX0pTXzIwMjIwOTI5MDA0IiwicmxqZWtwenkiLCJCRF9KU18yMDIyMDkyOTAwMiIsIkJEX0pTXzIwMjMwMzA3MDAxIiwic2d6eSIsIkJEX0pTXzIwMjIxMjIzMDAxIiwiamZ6eSIsIkJEX0pTXzIwMjIwNTI0MDA1Il0sInVzZXJJZCI6NjIzNSwiYXV0aG9yaXRpZXMiOlsiUk9MRV9yc2psbCIsIlJPTEVfQkRfSlNfMjAyMzAxMzEwMDEiLCJST0xFX3JsamVrcHp5IiwiUk9MRV9qZnp5IiwiUk9MRV96cHp6IiwiUk9MRV9zZ3p5IiwiUk9MRV9CRF9KU18yMDIyMTIyMzAwMSIsIlJPTEVfaHJicCIsIlJPTEVfQkRfSlNfMjAyMzAzMTYwMDEiLCJST0xFX3Jwb196cHp5IiwiUk9MRV9CRF9KU18yMDIyMDUyNDAwNSIsIlJPTEVfQkRfSlNfMjAyMjEyMjMwMDIiLCJST0xFX0JEX0pTXzIwMjIwOTI5MDAyIiwiUk9MRV9CRF9KU18yMDIyMDkyOTAwNCIsIlJPTEVfQkRfSlNfMjAyMzAxMTUwMDEiLCJST0xFX0JEX0pTXzIwMjIwOTAyMDA1IiwiUk9MRV9kYWdseSIsIlBFUlNPTl8yMDIyMDExODciLCJST0xFX3N3enkiLCJST0xFX0JEX0pTXzIwMjMwMzA3MDAxIl0sIm9yZ0lkIjo2MDQsImNsaWVudF9pZCI6Im15anN6bCIsInJlYWxOYW1lIjoi6IyD57qi5bOwIiwiYXVkIjpbInJlczEiXSwicm9sZUlkcyI6WzMwNCwzMDUsMTk3LDMwMiw3LDMwOCwzMTMsMTc0LDMxNCwxNiwxOTEsMTk1LDMxNSwxOTMsMzA2LDYsMTk2LDUsMTUyXSwidXNlcl9jb2RlIjoiMjAyMjAxMTg3Iiwic2NvcGUiOlsiYWxsIl0sImNvbUlkIjowLCJleHAiOjE3MDg4NDY2NzksImp0aSI6IjFjZGE5MTFjLTNlMTYtNDVhNC1hYWZiLWI1MTViYjE3YTEwYiJ9.WJF8-U4X39gB-psvisdQwE8rw9OxikNCW9f3e36ih_E"
  96. }
  97. // 接口请求携带数据,默认是form-data,根据自己业务来判断是否需要
  98. this.uploadConfigModel.data = [
  99. {
  100. name: "fileId", value: fileId
  101. }
  102. , {
  103. name: "functionName", value: "ZMCLKJ_SERVICE"
  104. }, {
  105. name: "moduleName", value: "FINANCE"
  106. }
  107. ]
  108. // 上传
  109. const flag = await FileUtil.uploadFile(this.fileModel, this.uploadConfigModel)
  110. // 上传提示
  111. prompt.showToast({
  112. message: flag === true ? '上传成功' : '上传失败',
  113. duration: 2000
  114. })
  115. // 根据上传的文件id获取文件url,这块需要后端在上传接口的时候就需要将fileId跟url绑定,然后调用接口获取
  116. }
  117. /**
  118. * 下载文件
  119. */
  120. async downloadFile() {
  121. // 调用下载文件api,文件名跟后缀根据实际下载的文件获取
  122. const flag = await FileUtil.downloadFile('下载的文件名', '文件后缀类型', '文件下载地址url')
  123. prompt.showToast({
  124. message: flag === true ? '下载完成,请根据刚保存文件路径打开文件管理查看下载文件' : '下载失败',
  125. duration: 2000
  126. })
  127. }
  128. build() {
  129. Row() {
  130. Column() {
  131. Button('第一种上传图片api', { stateEffect: true })
  132. .backgroundColor('#406EFF')
  133. .fontColor('#fff')
  134. .width('80%')
  135. .height(40)
  136. .margin({ top: 40, bottom: 20 })
  137. .onClick(() => {
  138. this.uploadImage()
  139. })
  140. Button('第二种上传图片api', { stateEffect: true })
  141. .backgroundColor('#406EFF')
  142. .fontColor('#fff')
  143. .width('80%')
  144. .height(40)
  145. .margin({ top: 40, bottom: 20 })
  146. .onClick(() => {
  147. this.uploadImageNew()
  148. })
  149. Button('上传文件', { stateEffect: true })
  150. .backgroundColor('#406EFF')
  151. .fontColor('#fff')
  152. .width('80%')
  153. .height(40)
  154. .margin({ top: 40, bottom: 20 })
  155. .onClick(() => {
  156. this.uploadFile()
  157. })
  158. Button('下载文件', { stateEffect: true })
  159. .backgroundColor('#406EFF')
  160. .fontColor('#fff')
  161. .width('80%')
  162. .height(40)
  163. .margin({ top: 40, bottom: 20 })
  164. .onClick(() => {
  165. this.downloadFile()
  166. })
  167. }
  168. .width('100%')
  169. }
  170. .height('100%')
  171. }
  172. }

api详解

FileUtil.selectPicture()

作用:打开手机相册选择图片,然后返回一个FileModel对象,对象里面是选择的图片信息

FileUtil.selectFile()

作用:打开文件管理选择文件,然后返回一个FileModel对象,对象里面是选择的文件信息

FileUtil.uploadFile(this.fileModel, this.uploadConfigModel)

作用:上传图片、文件等,上传配置uploadConfigModel需要自己手动构建在代码中

FileUtil.uploadFileNew(this.fileModel, data )

作用:上传图片、文件等,上传配置uploadConfigModel只需要在rawfile目录下面建立一个config.json配置文件即可,配置文件里面有以下参数

  1. {
  2. "method": "POST",
  3. "uploadUrl": "上传接口url",
  4. "header": {
  5. "Authorization": "token"
  6. }
  7. }

我们只需要构建表单入参data就好,如果自身上传接口不需要表单参数可以传空

FileUtil.downloadFile(fileName: string, fileSuffix: string, uploadUrl: string)

作用:根据url下载文件到真机


最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

点击领取→纯血版全套鸿蒙HarmonyOS学习资料(安全链接,放心点击希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、(南向驱动、嵌入式等)鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

鸿蒙(HarmonyOS NEXT)最新学习路线

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

HarmonyOS Next 最新全套视频教程

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

大厂面试必问面试题

鸿蒙南向开发技术

鸿蒙APP开发必备

鸿蒙生态应用开发白皮书V2.0PDF


请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/976764
推荐阅读
相关标签
  

闽ICP备14008679号