问题场景:从沙盒中获取一个图片本地路径,然后进行发送。做过的尝试如下:通过 DevEco-Studio 的 DeviceFile Browser 找到了 app 的 el1 和 el2 包路径,往里面上传图片的话报错没有权限;往代码工程的 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\_\_getrawfd93、相册图片可以通过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); })
问题场景:
从沙盒中获取一个图片本地路径,然后进行发送。做过的尝试如下:
参考答复:
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把东西写进最终文件,可以参考如下实现: