本文原创发布在华为开发者社区,更多鸿蒙场景化示例请见华为开发者联盟官网“行业实践与常见问题”专题页。
介绍
本示例基于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);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。