一个本地路径的文件如何转成 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中包含了文件的数据
回到顶部