HarmonyOS 鸿蒙Next 文件上传只支持cache目录下的文件

发布于 1周前 作者 phonegap100 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 文件上传只支持cache目录下的文件

当前上传应用文件功能,仅支持上传应用缓存文件路径(cacheDir)下的文件。

某些业务需要上传本地相册图片到服务端,比如【修改头像】,这个时候该如何上传文件。

9 回复

error:{"message":"Failed to open/read local data from file/application"

直接报错,还是权限的问题

今天找到方法了

将文件复制到cache目录

const filePath: string = result[0];
const resFile = fs.openSync(filePath, fs.OpenMode.READ_ONLY)
let newPath = context.cacheDir + "/" + resFile.name;
fs.copyFileSync(resFile.fd, newPath)
let formData = new FormData()
let realUri = "internal://cache/" + resFile.name;
formData.append('file', realUri)

然后参考下axios的文件上传代码:

https://gitee.com/openharmony-sig/ohos_axios#%E4%B8%8A%E4%BC%A0%E4%B8%8B%E8%BD%BD%E6%96%87%E4%BB%B6

import axios from '[@ohos](/user/ohos)/axios'
import { FormData } from '[@ohos](/user/ohos)/axios'

let formData = new FormData() formData.append(‘file’, ‘internal://cache/blue.jpg’)

// 发送请求 axios.post<string, AxiosResponse<string>, FormData>(‘https://www.xxx.com/upload’, formData, { headers: { ‘Content-Type’: ‘multipart/form-data’ }, context: getContext(this), onUploadProgress: (progressEvent: AxiosProgressEvent): void => { console.info(progressEvent && progressEvent.loaded && progressEvent.total ? Math.ceil(progressEvent.loaded / progressEvent.total * 100) + ‘%’ : ‘0%’); }, }).then((res: AxiosResponse<string>) => { console.info(“result” + JSON.stringify(res.data)); }).catch((err: AxiosError) => { console.error(“error:” + JSON.stringify(err)); })

同问,卡了好几天这个问题了

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

升级HarmonyOS后,发现手机的游戏性能也有了显著提升。

尝试了图片选择器拿出来的文件路径,并不支持上传

针对HarmonyOS鸿蒙Next文件上传只支持cache目录下的文件这一问题,以下是一些专业解答:

HarmonyOS鸿蒙Next确实限制了文件上传的目录范围,目前仅支持从应用的cache目录下选择文件进行上传。这是出于安全和应用数据管理的考虑。

若需要在应用中实现文件上传功能,建议按照以下步骤操作:

  1. 确保应用已正确配置网络权限,如“ohos.permission.INTERNET”,以允许应用执行网络请求。
  2. 使用文件选择器API或应用逻辑,将需要上传的文件保存到cache目录下。
  3. 构建包含文件数据的POST请求,注意设置正确的Content-Type,通常为multipart/form-data。
  4. 发送请求到服务器,并处理服务器的响应。

此外,若在设置代理后遇到文件上传接口报证书错误的问题,这通常与SSL证书验证有关。请检查证书有效性、代理服务器配置以及系统信任设置,确保客户端能够正确验证服务器证书。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部