如何在鸿蒙系统中实现图片或视频的批量下载功能?

我的应用需要从网络批量下载图片或视频,并保存到用户的本地相册中。请问,在鸿蒙系统中,如何使用相册管理模块(photoAccessHelper)来实现这一功能?
能否提供一个示例代码,展示如何创建媒体文件,并将其保存到用户的相册中?

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

阅读 1k
1 个回答

据我所知,在鸿蒙系统中实现图片或视频的批量下载功能,你可以使用网络请求库(如@ohos.network.http)来下载文件,并使用相册管理模块(photoAccessHelper)来保存文件到用户的相册中。

import { photoAccessHelper, dataSharePredicates } from '@kit.MediaLibraryKit';
import { http } from '@ohos.network.http';

async function downloadMediaFiles(fileUrls) {
    let context = getContext(this); // 假设这是你的Ability的上下文
    let phAccessHelper = await photoAccessHelper.getPhotoAccessHelper(context);

    for (let url of fileUrls) {
        try {
            // 发起网络请求下载文件
            let response = await http.get(new http.Request(url));
            if (response.statusCode === 200) {
                let data = await response.arrayBuffer();
                
                // 创建图片或视频资源变更请求
                let photoType = (url.endsWith('.jpg') || url.endsWith('.jpeg')) ? photoAccessHelper.PhotoType.IMAGE : photoAccessHelper.PhotoType.VIDEO;
                let extension = (photoType === photoAccessHelper.PhotoType.IMAGE) ? 'jpg' : 'mp4';
                let assetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createAssetRequest(context, photoType, extension);
                
                // 添加下载的数据作为资源
                assetChangeRequest.addResource(photoType === photoAccessHelper.PhotoType.IMAGE ? photoAccessHelper.ResourceType.IMAGE_RESOURCE : photoAccessHelper.ResourceType.VIDEO_RESOURCE, data);
                
                // 提交资源变更请求以保存文件到相册
                await phAccessHelper.applyChanges(assetChangeRequest);
                console.info('Media file downloaded and saved to album successfully');
            } else {
                console.error('Failed to download media file:', response.statusCode);
            }
        } catch (err) {
            console.error('Error downloading media file:', err);
        }
    }
}

// 调用函数
let fileUrls = ['https://example.com/image1.jpg', 'https://example.com/video1.mp4'];
downloadMediaFiles(fileUrls);

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进