在纯血鸿蒙Next(HarmonyOS NEXT)中,可以通过以下步骤下载图片到本地相册:
1. 申请存储权限
在 module.json5 文件中添加存储权限:
{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.WRITE_IMAGE"
}
]
}
}
2. 使用 PhotoAccessHelper 保存图片
通过 PhotoAccessHelper 将图片保存到相册:
import photoAccessHelper from '[@ohos](/user/ohos).file.photoAccessHelper';
import fs from '[@ohos](/user/ohos).file.fs';
async function saveImageToGallery(imageData: ArrayBuffer) {
try {
// 获取 PhotoAccessHelper 实例
const phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
// 创建相册文件(例如:test.jpg)
const options: photoAccessHelper.PhotoCreateOptions = {
title: 'test.jpg'
};
const fileUri = await phAccessHelper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg', options);
// 将 ArrayBuffer 写入文件
const file = await fs.open(fileUri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
await fs.write(file.fd, imageData);
await fs.close(file.fd);
console.log('图片保存成功,URI: ' + fileUri);
} catch (error) {
console.error('保存图片失败: ' + error);
}
}
3. 从网络下载图片
使用 http 模块下载图片,并调用上述保存方法:
import http from '[@ohos](/user/ohos).net.http';
async function downloadImage(imageUrl: string) {
try {
const httpRequest = http.createHttp();
const response = await httpRequest.request(imageUrl, { method: http.RequestMethod.GET });
if (response.responseCode === 200) {
// 将下载的 ArrayBuffer 保存到相册
await saveImageToGallery(response.result as ArrayBuffer);
} else {
console.error('下载失败,状态码: ' + response.responseCode);
}
} catch (error) {
console.error('下载图片失败: ' + error);
}
}
使用示例:
// 调用下载函数,传入图片URL
downloadImage('https://example.com/image.jpg');
注意事项:
- 确保应用已获取存储权限(用户需授权)。
- 网络权限需在
module.json5 中配置:"ohos.permission.INTERNET"。
- 图片数据需为
ArrayBuffer 格式,网络下载时可通过 response.result 获取。
通过以上步骤,即可实现将网络图片下载并保存到本地相册。