本文原创发布在华为开发者社区,更多鸿蒙场景化示例请见华为开发者联盟官网“行业实践与常见问题”专题页。

介绍

本示例基于openSync、writeSync接口实现了拷贝文件到沙箱。

实现拷贝文件到沙箱功能源码链接

效果预览

请添加链接描述

使用说明

点击按钮拷贝,拷贝之后即可保存图片文件。

实现思路

1.使用openSync、writeSync接口实现了拷贝文件到沙箱

 context.resourceManager.getRawFileContent('startIcon.png', (err: BusinessError, data: Uint8Array) => {
    if (err != null) {
      Logger.error('open file failed: ' + err.message)
    } else {
      let buffer = data.buffer
      let sandboxPath = context.filesDir
      Logger.info('myRawfileCopy path' + sandboxPath)
      let file = fs.openSync(context.filesDir + '/test.png', fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE)
      try {
        // 拷贝文件到沙箱
        fs.writeSync(file.fd, buffer)
        fs.close(file.fd)
      } catch (err) {
        Logger.info('myRawfileCopy error')
      }

    }
  })

2.保存到媒体库

 // 获取需要保存到媒体库的位于应用沙箱的图片/视频uri
    let srcFileUris: Array<string> = [
      fileUri.getUriFromPath(context.filesDir+ '/test.png')
    ];
    let photoCreationConfigs: Array<photoAccessHelper.PhotoCreationConfig> = [
      {
        title: 'test2', // 可选
        fileNameExtension: 'png',
        photoType: photoAccessHelper.PhotoType.IMAGE,
        subtype: photoAccessHelper.PhotoSubtype.DEFAULT, // 可选
      }
    ];
    let desFileUris: Array<string> = await phAccessHelper.showAssetsCreationDialog(srcFileUris, photoCreationConfigs);
    let file1 = fs.openSync(context.filesDir+ '/test.png', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    let arrayBuffer = new ArrayBuffer(4096000);
    let readLen = fs.readSync(file1.fd, arrayBuffer);
    let buf = buffer.from(arrayBuffer, 0, readLen);
    Logger.info('content of File: ' + buf.toString());
    let file2 = fs.openSync(desFileUris[0], fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    fs.closeSync(file2);
    fs.closeSync(file1);
    Logger.info('showAssetsCreationDialog success, data is ' + desFileUris);

鸿蒙场景化代码
1 声望0 粉丝