一个本地路径的文件如何转成 ArrayBuffer (HarmonyOS 鸿蒙Next)
一个本地路径的文件如何转成 ArrayBuffer (HarmonyOS 鸿蒙Next)
file:///data/storage/el2/base/haps/entry/files/1723796787051.png
比如这种路径
需求是想把这个路径的图片,保存到系统相册里
2 回复
沙箱路径直接保存就行了
```javascript
async imageWriteAlbumExample2(fileUri:string) {
console.info('createImageAssetRequestDemo:' + fileUri);
let context = this.getContext();
try {
// 需要确保fileUri对应的资源存在
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createImageAssetRequest(context, fileUri);
await phAccessHelper.applyChanges(assetChangeRequest);
console.info('apply createVideoAssetRequest successfully');
promptAction.showToast({
message: '已保存至相册',
duration: 2500
});
} catch (err) {
console.error(`createVideoAssetRequestDemo failed with error: ${err.code}, ${err.message}`);
promptAction.showToast({
message: '保存失败',
duration: 2000
});
}
}
//如果没有申请相册读写权限,可以用SaveButton
SaveButton().width('40%').backgroundColor("#1A1D25").onClick(async (event:ClickEvent, result:SaveButtonOnClickResult) => {
if (result == SaveButtonOnClickResult.SUCCESS) {
try {
const context = this.getContext();
let helper = photoAccessHelper.getPhotoAccessHelper(context);
// onClick触发后10秒内通过createAsset接口创建图片文件,10秒后createAsset权限收回。
let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'png');
// 使用uri打开文件,可以持续写入内容,写入过程不受时间限制
let resFile = fs.openSync(this.imagePath, fs.OpenMode.READ_ONLY)
let file = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
// 写入文件
fs.copyFileSync(resFile.fd, file.fd);
// 关闭文件
fs.closeSync(file.fd);
fs.closeSync(resFile.fd);
promptAction.showToast({
message: '已保存至相册',
duration: 2500
});
} catch (error) {
console.error("error is " + JSON.stringify(error));
}
} else {
console.error("result error is " + JSON.stringify(result));
}
})
更多关于一个本地路径的文件如何转成 ArrayBuffer (HarmonyOS 鸿蒙Next)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙Next)中,将本地路径的文件转换为ArrayBuffer可以通过ohos.file.fs
模块实现。首先,使用fs.openSync
打开文件,然后使用fs.readSync
读取文件内容到ArrayBuffer
中。以下是一个示例代码:
import fs from '@ohos.file.fs';
// 文件路径
let filePath = 'your_file_path';
// 打开文件
let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);
// 获取文件大小
let stat = fs.statSync(filePath);
let fileSize = stat.size;
// 创建ArrayBuffer
let arrayBuffer = new ArrayBuffer(fileSize);
// 读取文件内容到ArrayBuffer
fs.readSync(file.fd, arrayBuffer);
// 关闭文件
fs.closeSync(file.fd);
// 现在arrayBuffer中包含了文件的数据