HarmonyOS 鸿蒙Next中如何把网络链接的视频或者图片保存到本地相册

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next中如何把网络链接的视频或者图片保存到本地相册 官方文档 https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-image-13-V5 是通过http请求获取图片并通过写入文件的形式保存到相册。

但是有两个问题:

第一个是request最多接收5M的数据,获取视频或者大的图片就没办法实现。

第二个问题是写入文件的write方法,需要传入arraybuffer,网络地址的url怎么转换成arraybuffer呢,或者直接传入url能保存成功吗


更多关于HarmonyOS 鸿蒙Next中如何把网络链接的视频或者图片保存到本地相册的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

http.request几口上传最大可支持5m数据传递,如需要传递大于5m的数据可使用requestInstream采用流式接口能力,使用可参考如下:

let httpRequest = http.createHttp();
httpRequest.on("dataReceiveProgress", (data: http.DataReceiveProgressInfo) => {
  console.info("dataReceiveProgress:" + JSON.stringify(data));
});
httpRequest.on("dataReceive", (data: ArrayBuffer) => {
  console.info("dataReceive length: " + JSON.stringify(data.byteLength));
});
httpRequest.on("dataEnd", () => {
  console.info("Receive dataEnd !");
});
httpRequest.requestInStream(
  "https://i1.hdslb.com/bfs/new_dyn/946842dda704e544afa6fdb4e61becc02156149.jpg",
  (err: BusinessError, data: number) => {
    if (!err) {
      console.info("ResponseCode is " + JSON.stringify(data));
    } else {
      console.info("requestInStream ERROR : err = " + JSON.stringify(err));
    }
  })

推荐使用rcp
onDataReceive参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/remote-communication-rcp-V5#section9264115918536

更多关于HarmonyOS 鸿蒙Next中如何把网络链接的视频或者图片保存到本地相册的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙Next)中,将网络链接的视频或图片保存到本地相册可以通过以下步骤实现:

  1. 获取网络资源:首先,使用HttpURLConnectionHttpClient等网络请求工具,从给定的URL获取视频或图片的二进制数据。

  2. 创建本地文件:使用File类在设备的存储空间中创建一个文件,用于保存下载的视频或图片数据。

  3. 写入数据:将获取到的二进制数据写入到创建的文件中。

  4. 更新媒体库:使用MediaScannerConnection类将新保存的文件添加到系统的媒体库中,使其能够在相册中显示。

以下是一个简单的代码示例:

import http from '@ohos.net.http';
import fileIO from '@ohos.fileio';
import mediaLibrary from '@ohos.medialibrary';

async function saveMediaToGallery(url: string, fileName: string) {
    // 发起网络请求
    let httpRequest = http.createHttp();
    let response = await httpRequest.request(url, { method: http.RequestMethod.GET });

    // 创建本地文件
    let filePath = `/data/storage/el2/base/files/${fileName}`;
    let file = fileIO.openSync(filePath, fileIO.OpenMode.CREAT | fileIO.OpenMode.WRONLY);

    // 写入数据
    fileIO.writeSync(file.fd, response.result);
    fileIO.closeSync(file.fd);

    // 更新媒体库
    let media = mediaLibrary.getMediaLibrary();
    media.addMediaAsset(filePath, (err, uri) => {
        if (err) {
            console.error('Failed to add media to gallery:', err);
        } else {
            console.log('Media added to gallery:', uri);
        }
    });
}

在这个示例中,saveMediaToGallery函数接收一个URL和文件名作为参数,下载网络资源并保存到本地,然后将其添加到相册中。

在HarmonyOS鸿蒙Next中,保存网络链接的视频或图片到本地相册可以通过以下步骤实现:

  1. 使用网络请求库:如HttpURLConnectionOkHttp,下载视频或图片文件。
  2. 保存到本地存储:使用File类将下载的文件保存到设备的指定目录,通常是/storage/emulated/0/Pictures//storage/emulated/0/Movies/
  3. 更新媒体库:通过MediaScannerConnection类扫描新文件,使其在相册中可见。

示例代码片段:

// 下载并保存图片或视频文件
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "filename.jpg");
// 使用MediaScannerConnection更新媒体库
MediaScannerConnection.scanFile(context, new String[]{file.toString()}, null, null);

确保在AndroidManifest.xml中添加必要的权限,如INTERNETWRITE_EXTERNAL_STORAGE

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!