HarmonyOS 鸿蒙Next 大文件下载怎么保存到系统相册中
HarmonyOS 鸿蒙Next 大文件下载怎么保存到系统相册中
问一下,我想要下载大的视频文件,使用 request.downloadFile方法,下载后我怎么保存到系统相册
当前由于权限收缩的原因 目前保存视频和图片到相册推荐使用 saveButton的安全控件 。
或申请READ/WRITE_IMAGEVIDEO的权限,参考指南: 【 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/declare-permissions-in-acl-V13】
下载后用fs以流的形式读写文件,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/app-file-access-V5#%E4%BB%A5%E6%B5%81%E7%9A%84%E5%BD%A2%E5%BC%8F%E8%AF%BB%E5%86%99%E6%96%87%E4%BB%B6
SaveButton().onClick(async (event:ClickEvent, result:SaveButtonOnClickResult) => {
if (result == SaveButtonOnClickResult.SUCCESS) {
try {
const context = getContext(this);
//获取video_buff
let filePath = context.filesDir + "/test.txt";
let stat = await fs.stat(filePath)
let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE);
let arrayBuffer = new ArrayBuffer(stat.size);
let readLen = await fs.read(file.fd,arrayBuffer);
//获取buff
let video_buff = buffer.from(arrayBuffer, 0, readLen);
//获取权限
let helper = photoAccessHelper.getPhotoAccessHelper(context);
// onClick触发后10秒内通过createAsset接口创建图片文件,10秒后createAsset权限收回。
//创建保存路径
let video_uri = await helper.createAsset(photoAccessHelper.PhotoType.VIDEO, 'mp4');
// 使用uri打开文件,可以持续写入内容,写入过程不受时间限制
let file_write = await fs.open(video_uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
// 写入文件
await fs.write(file_write.fd, video_buff.buffer);
// 关闭文件
await fs.close(file_write.fd);
} catch (error) {
console.error("error is "+ JSON.stringify(error));
}
}
})
saveButton参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/savebutton-V5#%E5%BC%80%E5%8F%91%E6%AD%A5%E9%AA%A4
httpDownFileGet这个下载看上去是没有问题的,filepath就是视频下载后的沙盒路径,在下载完成complete回调中从filepath读取数据并写入。
沙盒路径需要通过getContext().cacheDir获取,不能通过代码写固定。
参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-media-components-video-V5
支持file://路径前缀的字符串,即应用沙箱URI:file://<bundleName>/<sandboxPath>。用于读取应用沙箱路径内的资源。需要保证目录包路径下的文件有可读权限。加上前缀 'file://'
更多关于HarmonyOS 鸿蒙Next 大文件下载怎么保存到系统相册中的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS 鸿蒙Next系统中,将大文件下载并保存到系统相册中,可以按照以下步骤操作:
-
下载文件:通过FilePicker或相关API下载大文件到本地,并确保文件保存在应用的沙箱路径下或指定目录(如Download目录)。
-
文件处理:如果下载的文件不是图片格式,需要将其转换为图片格式(如JPEG或PNG)。这通常涉及解码原文件、编码为图片格式以及可能的图像压缩步骤。
-
保存到相册:
- 使用
photoAccessHelper.createAsset
方法创建一个新的图片资源。 - 通过文件I/O操作(如
fs.open
、fs.write
等)将转换后的图片数据写入到创建的资产中。 - 使用
photoAccessHelper.showAssetsCreationDialog
方法将图片添加到系统相册,此方法需要传入源文件的URI和图片创建配置(如文件名、类型等)。
- 使用
请注意,如果文件较大,处理过程可能会消耗较多时间和系统资源。同时,picker获取的URI只具有临时权限,若需要持久化保存文件,则需通过FilePicker设置永久授权方式获取持久化权限。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。