如何获取手机本地图片?

如题:如何获取手机本地图片?

阅读 807
1 个回答

问题场景:

从沙盒中获取一个图片本地路径,然后进行发送。做过的尝试如下:

  1. 通过 DevEco-Studio 的 DeviceFile Browser 找到了 app 的 el1 和 el2 包路径,往里面上传图片的话报错没有权限;
  2. 往代码工程的 rawfile 目录中塞图片,但是无法知道 rawfile 的本地路径。

参考答复:

1、可以通过下载文件接口下载至el2文件沙箱目录:

文件路径为getContext(this).filesDir + '/' + {文件名}

2、rawfile目录文件可以通过resourceManager..getRawFd()接口获取参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-resource-manager-0000001815087730-V5\#ZH-CN\_TOPIC\_0000001834460252\_\_getrawfd9

3、相册图片可以通过picker方式获取参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/select-user-file-0000001774280102-V5\#ZH-CN\_TOPIC\_0000001881179297\_\_%E9%80%89%E6%8B%A9%E5%9B%BE%E7%89%87%E6%88%96%E8%A7%86%E9%A2%91%E7%B1%BB%E6%96%87%E4%BB%B6

目前resourcemanager拿到的fd不支持copyfile(所有rawfile被压缩在一块), 得用fs.read接口指定offset和length去读出来,然后再从buffer把东西写进最终文件,可以参考如下实现:

getContext().resourceManager.getRawFileContent('1.png', (_err, value) => {
  let myBuffer: ArrayBufferLike = value.buffer
  let filePath = getContext().filesDir + "1.png";
  console.log("testTag-filePath:" + filePath);
  let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
  let writeLen = fs.writeSync(file.fd, myBuffer);
  console.info("testTag-write data to file succeed and size is:" + writeLen);
  fs.closeSync(file);
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进