HarmonyOS鸿蒙Next中request.uploadFile上传cache路径图片提示没有权限

HarmonyOS鸿蒙Next中request.uploadFile上传cache路径图片提示没有权限

HarmonyNext ArkUI ArkTS api12 使用request.uploadFile上传cache路径中图片时捕捉异常没有权限。

4 回复

看看你的cache路径,推荐使用 SandboxFinder - 沙箱文件浏览器,来分析沙箱文件问题

三方仓库地址: ohpm.openharmony.cn/#/cn/detail/@cxy%2Fsandboxfinder

更多关于HarmonyOS鸿蒙Next中request.uploadFile上传cache路径图片提示没有权限的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在使用request.uploadFile之前以只读方式进行打开文件

示例:

const file = fileIo.openSync(result.photoUris[0], fileIo.OpenMode.READ_ONLY)

完整示例:

const photo = new picker.PhotoViewPicker()
const result = await photo.select({
  MIMEType: picker.PhotoViewMIMETypes.IMAGE_TYPE,
  maxSelectNumber: 1, // 最大图片数量
})
if (result.photoUris.length) {
  const photoContext = getContext(this)
  const targetPath = `${photoContext.cacheDir}/photo.jpg`

  const file = fileIo.openSync(result.photoUris[0], fileIo.OpenMode.READ_ONLY)
  fileIo.copyFileSync(file.fd, targetPath)
  // 使用await拿到上传的task模块
  const task = await request.uploadFile(photoContext,
    {
      url: '',
      method: http.RequestMethod.POST,
      header: {
        'Content-Type': 'multipart/form-data',
      },
      data: [],
      files: [{
        filename: 'photo.jpg', // 要写文件后缀
        name: 'img', // 跟接口文档保持一致
        uri: 'internal://cache/photo.jpg', // 要写图片的文件后缀
        type: 'jpg'
      }]
    })
  // complete 上传完成
  task.on('complete', () => {
    AlertDialog.show({ message: '上传成功' })
  })
  task.on('fail', () => {
    AlertDialog.show({ message: '上传失败' })
  })
  task.on('headerReceive', (obj) => {
    const res = obj as HttpRes
    const body: UploadRes = JSON.parse(res.body)

    this.src = body.data.url
    AlertDialog.show({ message: body.data.url })
  })
}

在HarmonyOS Next中,使用request.uploadFile上传cache路径图片时出现权限问题,可能是由于应用未正确配置文件访问权限。需要在module.json5中声明ohos.permission.READ_MEDIA权限,并确保应用沙箱内文件路径格式正确,应使用"internal://cache/文件名"的URI格式。同时检查上传的目标服务是否接受该文件类型。

在HarmonyOS Next中,request.uploadFile上传cache路径图片出现权限问题,可能是由于以下几个原因:

  1. 文件路径权限问题:
  • cache目录属于应用沙箱,默认只有应用自身有访问权限
  • 确保使用正确的沙箱路径格式:internal://cache/xxx.jpg
  1. 未声明所需权限: 在config.json中需要添加以下权限声明:
"reqPermissions": [
  {
    "name": "ohos.permission.INTERNET"
  },
  {
    "name": "ohos.permission.READ_MEDIA"
  }
]
  1. 文件访问方式: 推荐使用以下方式获取cache文件路径:
import fileio from '@ohos.fileio';
const cacheDir = getContext().cacheDir;
const filePath = `${cacheDir}/test.jpg`;
  1. 上传代码示例:
let uploadTask = request.uploadFile({
  url: 'your_server_url',
  files: [
    {
      filename: 'test.jpg',
      name: 'file',
      uri: `internal://cache/test.jpg`,  // 使用正确的uri格式
      type: 'image/jpeg'
    }
  ],
  success: (response) => {
    console.log('Upload success');
  },
  fail: (error) => {
    console.error('Upload error:', error);
  }
});

如果问题仍然存在,建议检查:

  1. 文件是否确实存在于指定路径
  2. 文件uri格式是否正确
  3. 是否在真机调试(模拟器可能有不同行为)
回到顶部