HarmonyOS鸿蒙Next中如何保存http网络图片到本地

HarmonyOS鸿蒙Next中如何保存http网络图片到本地 如何保存http网络图片到本地

3 回复

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

先申请以下权限:

  • ohos.permission.INTERNET
  • ohos.permission.WRITE_IMAGEVIDEO

其中ohos.permission.WRITE_IMAGEVIDEO需要向用户申请授权,可参考文档 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/request-user-authorization-V5

保存网络图片代码如下:

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中如何保存http网络图片到本地的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,保存HTTP网络图片到本地可以通过以下步骤实现:

  1. 使用HttpURLConnectionHttpClient下载图片:首先,通过HTTP请求获取网络图片的数据流。可以使用HttpURLConnectionHttpClient来发起GET请求,获取图片的输入流。

  2. 将图片数据写入本地文件:获取到图片的输入流后,将其写入本地文件。可以使用FileOutputStream将图片数据写入到设备的存储中。

  3. 使用Image组件显示图片(可选):如果需要将下载的图片显示在界面上,可以使用Image组件,并通过PixelMapImageSource加载本地图片文件。

以下是代码示例:

import http from '@ohos.net.http';
import fileIO from '@ohos.fileio';
import image from '@ohos.multimedia.image';

async function saveImageToLocal(url: string, filePath: string) {
    const httpRequest = http.createHttp();
    const response = await httpRequest.request(url);
    if (response.responseCode === http.ResponseCode.OK) {
        const file = fileIO.openSync(filePath, fileIO.OpenMode.CREATE | fileIO.OpenMode.WRITE_ONLY);
        fileIO.writeSync(file.fd, response.result as ArrayBuffer);
        fileIO.closeSync(file.fd);
        console.log('图片保存成功');
    } else {
        console.error('图片下载失败');
    }
}

// 使用示例
const imageUrl = 'https://example.com/image.jpg';
const localFilePath = '/data/storage/el2/base/files/image.jpg';
saveImageToLocal(imageUrl, localFilePath);

在这个示例中,saveImageToLocal函数通过HTTP请求下载图片,并将其保存到指定路径。http.createHttp()用于创建HTTP请求,fileIO.openSyncfileIO.writeSync用于将图片数据写入本地文件。

通过这种方式,你可以在HarmonyOS鸿蒙Next中将网络图片保存到本地。

在HarmonyOS鸿蒙Next中,可以通过以下步骤保存HTTP网络图片到本地:

  1. 获取图片数据:使用HttpURLConnectionHttpClient获取网络图片的字节流。
  2. 创建文件:使用File类在本地存储路径创建文件。
  3. 写入文件:将获取的字节流写入创建的文件中。

示例代码:

URL url = new URL(imageUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream inputStream = connection.getInputStream();
File file = new File(context.getFilesDir(), "image.jpg");
FileOutputStream outputStream = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
    outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
inputStream.close();

确保在AndroidManifest.xml中声明网络权限:

<uses-permission android:name="android.permission.INTERNET" />
回到顶部