赞
踩
需求:
选择相册图片后,将文件上传到服务器,接口会返回图片地址。
问题:
1、鸿蒙自带的文件上传返回值只会返回上传状态,不会返回接口返回信息。
类似问题 HarmonyOS上传文件以及权限授权_harmonyos中axios上传文件-CSDN博客
2、用axios上传
2.1、接口不通,提示ERR_BAD_OPTION_VALUE
2.2、接口通了,报错500
具体实现:
- import axios from '@ohos/axios'
- import { AxiosResponse,AxiosError,FormData } from '@ohos/axios'
- import picker from '@ohos.file.picker'
- import fs from '@ohos.file.fs';
-
-
- let context = getContext(this) as common.UIAbilityContext;
- const photoSelectOptions = new picker.PhotoSelectOptions();
- const photoViewPicker = new picker.PhotoViewPicker();
- // 过滤选择媒体文件类型为IMAGE
- photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
- // 选择媒体文件的最大数目
- photoSelectOptions.maxSelectNumber = 1;
-
- photoViewPicker.select(photoSelectOptions).then(async (photoSelectResult) => {
- //当前文件临时地址
- this.userImg = photoSelectResult.photoUris[0]
-
- fs.open(uri, fs.OpenMode.READ_ONLY).then((file)=>{
- let fileName = context.cacheDir + '/' + file.name
- // 复制文件到缓存目录下
- fs.copyFile(file.fd, fileName).then(async()=>{
-
- // 上传
- let formData = new FormData()
- formData.append('userImageFile', "internal://cache/"+ file.name)
- formData.append('userName', 'user')
- formData.append('source', '1') //这里值必须为string ,2.2报错原因
-
- const uploadUrl = 'https://上传地址'
-
- axios.post<string, AxiosResponse<返回值类型>, FormData>(uploadUrl, formData, {
- //这俩必须有 其他看需求
-
- headers: { 'Content-Type': 'multipart/form-data'},
- context: getContext(context) //必须加这句 2.1报错的原因
-
- }).then(async(res: AxiosResponse<返回值类型>) => {
- console.info("result" + JSON.stringify(res.data));
- this.userImage = res?.data?.result
-
- }).catch((err: AxiosError) => {
- console.error("error:" + JSON.stringify(err));
- })
- })
- })
参考链接:
ohos_axios: 本库基于Axios 原库v1.3.4版本进行适配,使其可以运行在 OpenHarmony,并沿用其现有用法和特性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。