HarmonyOS鸿蒙Next中网络图片地址加载完成过后保存到手机相册

HarmonyOS鸿蒙Next中网络图片地址加载完成过后保存到手机相册 网络图片地址加载完成过后保存到手机相册

3 回复

使用http模块下的request方法下载图片,并在该方法的回调函数中保存到相册

先申请以下权限:

保存网络图片代码如下:

import { http } from '@kit.NetworkKit'
import { BusinessError } from '@kit.BasicServicesKit';
import { ResponseCode } from '@ohos.net.http';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import fs from '@ohos.file.fs';

@Entry
@Component
struct Index {
  loadImageWithUrl(url: string) {
    // 使用request下载图片并在回调函数中保存图片到相册
    http.createHttp().request(url,
      {
        method: http.RequestMethod.GET,
        connectTimeout: 60000,
        readTimeout: 60000
      },
      async (error: BusinessError, data: http.HttpResponse) => {
        if (error) {
          console.error(`http reqeust failed with. Code: ${error.code}, message: ${error.message}`);
        } else {
          if (ResponseCode.ResponseCode.OK === data.responseCode) {
            let imageBuffer: ArrayBuffer = data.result as ArrayBuffer;
            try {
              // 获取相册路径
              const context = this.getContext();
              let helper = photoAccessHelper.getPhotoAccessHelper(context);
              let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg')
              let file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
              // 写入文件
              await fs.write(file.fd, imageBuffer);
              // 关闭文件
              await fs.close(file.fd);
            } catch (error) {
              console.error("error is " + JSON.stringify(error))
            }
          } else {
            console.error("error occurred when image downloaded!")
          }
        }
      })
  }
  ......
}

更多关于HarmonyOS鸿蒙Next中网络图片地址加载完成过后保存到手机相册的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,加载网络图片并保存到手机相册可以通过Image组件和PhotoAccessHelper模块实现。首先,使用Image组件加载网络图片,通过fetchXMLHttpRequest获取图片数据。获取到图片数据后,使用PhotoAccessHelper模块将图片保存到相册。

具体步骤如下:

  1. 加载网络图片:使用Image组件显示网络图片,可以通过fetchXMLHttpRequest获取图片的二进制数据。
  2. 保存图片:使用PhotoAccessHelper模块的createAsset方法将图片数据保存到相册。

示例代码如下:

import photoAccessHelper from '@ohos.file.photoAccessHelper';
import image from '@ohos.multimedia.image';
import http from '@ohos.net.http';

async function saveImageToGallery(imageUrl) {
    try {
        // 获取图片数据
        let httpRequest = http.createHttp();
        let response = await httpRequest.request(imageUrl, { method: http.RequestMethod.GET });
        let imageData = response.result;

        // 创建ImageSource对象
        let imageSource = image.createImageSource(imageData);
        let imagePacker = image.createImagePacker();

        // 编码为JPEG格式
        let packOpts = { format: "image/jpeg", quality: 100 };
        let packedImage = await imagePacker.packing(imageSource, packOpts);

        // 保存到相册
        let photoHelper = photoAccessHelper.getPhotoAccessHelper();
        let uri = await photoHelper.createAsset('IMAGE_JPEG');
        let file = await fs.open(uri, fs.OpenMode.READ_WRITE);
        await fs.write(file.fd, packedImage);
        await fs.close(file.fd);
    } catch (error) {
        console.error('Failed to save image to gallery:', error);
    }
}

该代码通过http模块获取网络图片数据,使用ImageSourceImagePacker处理图片数据,最后通过PhotoAccessHelper将图片保存到相册。

在HarmonyOS鸿蒙Next中,加载网络图片并保存到手机相册的步骤如下:

  1. 使用Image组件加载网络图片。
  2. 使用Http模块请求图片数据,并将其转换为PixelMap对象。
  3. 使用PhotoAccessHelper模块将PixelMap保存到相册。

示例代码:

import http from '@ohos.net.http';
import image from '@ohos.multimedia.image';
import photoAccessHelper from '@ohos.file.photoAccessHelper';

async function saveImageToGallery(imageUrl: string) {
  const httpRequest = http.createHttp();
  const response = await httpRequest.request(imageUrl, { method: 'GET', responseType: 'arraybuffer' });
  const imageSource = image.createImageSource(response.result);
  const pixelMap = await imageSource.createPixelMap();
  const phAccessHelper = photoAccessHelper.getPhotoAccessHelper();
  await phAccessHelper.createAsset(pixelMap, 'JPEG');
}

saveImageToGallery('https://example.com/image.jpg');

确保应用中已声明相应的权限:

"reqPermissions": [
  {
    "name": "ohos.permission.WRITE_IMAGE"
  }
]
回到顶部