鸿蒙用cameraPicker拍照,指定的应用沙盒路径,返回结果有图片,但是在Device File Browser中看不到图片

1、用@ohos.multimedia.cameraPicker拍照,指定的应用沙盒路径,代码如下:

const filePath = `${this.context.cacheDir}/${Date.now()}.jpg`; 
const pickerProfile: picker.PickerProfile = { 
  cameraPosition: cameraPosition, 
  saveUri: filePath 
}; 
const mediaTypes: picker.PickerMediaType[] = [picker.PickerMediaType.PHOTO]; 
const pickerResult: picker.PickerResult = await picker.pick(this.context, mediaTypes, pickerProfile); 
hilog.info(LOG_DOMAIN, TAG, `${pickerResult.resultCode}:${pickerResult.resultUri}`);

2、上面的代码中hilog打印的结果有图片路径信息:

/data/storage/el2/base/haps/entry/cache/1712650043894.jpg

3、但是在Device File Browser中看不到图片:

鸿蒙用cameraPicker拍照,指定的应用沙盒路径,返回结果有图片,但是在Device File Browser中看不到图片 -鸿蒙开发者社区

HarmonyOS
2024-08-22 19:13:16
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

请按照如下方式检查一下

(1)请检查是否有设置相应的访问权限,上传应用文件功能,仅支持上传应用缓存文件路径(cacheDir)下的文件。使用上传下载模块,需声明权限:ohos.permission.INTERNET

(2)确认要读取的文件是否具有读写权限 ,例如用hdc推到沙箱后的文件没有相应读写权限,需要使用linux命令chmod来授予权限,使用hdc进入到文件所在目录下,执行chmod命令,如:

chmod 777 test.txt 授予某个文件rwx权限

chmod 777 * 授予当前目录下所有文件rwx权限

chmod -R 777 授予当前目录下所有文件(递归)rwx权限

读写应用沙箱内文件Api可参考

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/file-management/Readme-CN.md

(3)cache目录更改为/data/storage/el2/base/cache/ ...再试一下

saveUri不为空且不具备写权限,则无法获取到resultUri,沙盒路径不具备写权限

具体可以查看官方文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-camerapicker-0000001815247206-V5

非root权限hdc是无法获取沙箱目录,ide调试有相关需求在做,短期建议伙伴申请eng版本解决

1.公共目录是要获取权限的

2.请在创建沙盒目录后,创建一个可读写的文件,然后将该文件的uri传入saveuri就可以拍照保存沙盒了,并且是不对外展示的。文件使用完毕后调用file.closeSync()关闭即可。

示例代码:

try { 
  let filePath = `${this.context.cacheDir}/${Date.now()}.jpg`; 
  let uri = fileUri.getUriFromPath(filePath); 
  let file = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 
  let pickerProfile: picker.PickerProfile = { 
    cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK, 
    saveUri: uri 
  }; 
  let pickerResult: picker.PickerResult = await picker.pick(mContext, 
    [picker.PickerMediaType.PHOTO], pickerProfile); 
  console.log("the pick pickerResult is:" + JSON.stringify(pickerResult)); 
} catch (error) { 
  let err = error as BusinessError; 
  console.error(`the pick call failed. error code: ${err.code}`); 
}
分享
微博
QQ
微信
回复
2024-08-23 17:36:34
相关问题
HarmonyOS图片压缩不到指定大小
475浏览 • 1回复 待解决
HarmonyOS 加载RN路径资源文件
72浏览 • 1回复 待解决
有谁知道如何访问路径
486浏览 • 1回复 待解决
Hi3861开发板串口为什么看不到命令行?
11484浏览 • 5回复 待解决
Image组件如何加载盒内图片
2386浏览 • 1回复 待解决