当前位置: 首页 > news >正文

鸿蒙应用开发中,实现文件上传功能

在 ArkTS 中实现文件上传可以通过以下步骤:

一、准备工作

  1. 确定上传目标:明确文件要上传到的服务器地址和接口。确保服务器端已经配置好接收文件上传的功能。

二、引入必要的模块

在 ArkTS 文件中,引入与网络请求和文件操作相关的模块。例如:

import { rcp } from '@kit.RemoteCommunicationKit';
import { picker } from '@kit.CoreFileKit';
import { common } from '@kit.AbilityKit';
import fs from '@ohos.file.fs';

三、实现文件上传逻辑

  1. 创建文件选择器实例:
	  const documentViewPicker = new picker.DocumentViewPicker(context);let documentSelectOptions = new picker.DocumentSelectOptions();documentSelectOptions.maxSelectNumber = 1documentSelectOptions.fileSuffixFilters = ['.png', '.txt', '.mp4', '.jpg'];//选择是否对指定文件或目录授权,true为授权,当为true时,defaultFilePathUri为必选参数,拉起文管授权界面;false为非授权,拉起常规文管界面(可选)documentSelectOptions.authMode = true;
  1. 选择文件,配置上传服务器的参数,代码如下:
      documentViewPicker.select(documentSelectOptions).then(async (documentSelectResult: Array<string>) => {// 文件上传的时候一定要先拷贝一份,然后在进行上传,要不然没权限操作文件const context = getContext(this)const fileType = 'jpg'// (以时间戳)生成一个新的文件名const fileName = Date.now() + '.' + fileType// 通过缓存路径+文件名 拼接出完整的路径const copyFilePath = context.cacheDir + '/' + fileName// 将文件 拷贝到 临时目录const file = fs.openSync(documentSelectResult[0], fs.OpenMode.READ_ONLY)fs.copyFileSync(file.fd, copyFilePath)const formFieldFileValue: rcp.FormFieldFileValue = {contentType: "image/png",remoteFileName: fileName,contentOrPath: copyFilePath,};const formData = new rcp.MultipartForm ({'file': formFieldFileValue // file表示服务器端接收的数据的属性名})axiosInstance.post(CommonConstant.BASE_URL+CommonConstant.UPLOAD_PATH,formData).then((response:AxiosResponse)=>{console.error("上传文件",JSON.stringify(response))}).catch((err:BusinessError)=>{console.info("上传文件接口报错", JSON.stringify(err));})})
  1. 发送请求

以下是一个示例代码:

  async onUpload(){try {let context = getContext(this) as common.Context; // 请确保 getContext(this) 返回结果为 UIAbilityContext// 创建文件选择器实例const documentViewPicker = new picker.DocumentViewPicker(context);let documentSelectOptions = new picker.DocumentSelectOptions();documentSelectOptions.maxSelectNumber = 1documentSelectOptions.fileSuffixFilters = ['.png', '.txt', '.mp4', '.jpg'];//选择是否对指定文件或目录授权,true为授权,当为true时,defaultFilePathUri为必选参数,拉起文管授权界面;false为非授权,拉起常规文管界面(可选)documentSelectOptions.authMode = true;documentViewPicker.select(documentSelectOptions).then(async (documentSelectResult: Array<string>) => {// 文件上传的时候一定要先拷贝一份,然后在进行上传,要不然没权限操作文件const context = getContext(this)const fileType = 'jpg'// (以时间戳)生成一个新的文件名const fileName = Date.now() + '.' + fileType// 通过缓存路径+文件名 拼接出完整的路径const copyFilePath = context.cacheDir + '/' + fileName// 将文件 拷贝到 临时目录const file = fs.openSync(documentSelectResult[0], fs.OpenMode.READ_ONLY)fs.copyFileSync(file.fd, copyFilePath)const formFieldFileValue: rcp.FormFieldFileValue = {contentType: "image/png",remoteFileName: fileName,contentOrPath: copyFilePath,};const formData = new rcp.MultipartForm ({'file': formFieldFileValue // file表示服务器端接收的数据的属性名})// axiosInstance是自定义的请求方法     axiosInstance.post(CommonConstant.BASE_URL+CommonConstant.UPLOAD_PATH,formData).then((response:AxiosResponse)=>{console.error("上传文件",JSON.stringify(response))}).catch((err:BusinessError)=>{console.info("上传文件接口报错", JSON.stringify(err));})})} catch (error) {console.error('文件上传错误:', error);}}

效果如图:
在这里插入图片描述
在这里插入图片描述


http://www.mrgr.cn/news/54264.html

相关文章:

  • JAVA课设-图书指引系统(前后端分离)
  • General Purpose I/O Ports and Peripheral I/O Lines (Ports)
  • 出栈序列的合法性判断
  • 边界AIchat:智能办公与学习的全能助手
  • msvcp140.dll丢失的解决方法吃鸡
  • 聚观早报 | 比亚迪海豹06GT上市;诺基亚中国裁员
  • 查询网站在线人数
  • Python基础09_类和对象(下)迭代器和生成器函数式编程
  • UEFI 基础教程 (四十八.2) — UEFI code style
  • org.apache.http.impl.client.CloseableHttpClient的时候如果发生异常
  • 《使用Gin框架构建分布式应用》阅读笔记:p88-p100
  • 群控系统服务端开发模式-功能整理
  • 【移动安全】OWASP MASTG 移动应用程序安全测试指南
  • 大模型~合集14
  • 理解 React 中的 ReactElement、children 和 ReactNode
  • Java 线程池获取池中所有线程列表的方法
  • 优化方法之随机梯度下降SGD优化器收敛性证明
  • 代码随想录day04
  • mysql connect -- C api编译链接问题,接口介绍(初始化和销毁,连接,执行sql语句,获取结果集的元数据和数据,设置编码格式)
  • Python Logging 模块
  • Unexpected error: java.security.InvalidAlgorithmParameterException
  • 关于office中的word文档图片替换问题
  • MySQL程序介绍<二>
  • freeswitch-esl 进行强拆控制
  • 【代码随想录Day46】单调栈Part01
  • 探索计算机技术的无限可能:从基础到前沿的深度之旅