HarmonyOS鸿蒙Next中如何下载图片类型的文件
HarmonyOS鸿蒙Next中如何下载图片类型的文件 需求是:
- 怎样判断是图片类型
- 下载图片类型的文件
"H5图片保存到相册可以参考如下链接中的api,使用js调用原生方法: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-photoaccesshelper-V5#showassetscreationdialog12 具体参考代码如下:
import common from '@ohos.app.ability.common';
import fs from '@ohos.file.fs';
import request from '@ohos.request';
import { BusinessError } from '@ohos.base';
import buffer from '@ohos.buffer';
import { dataSharePredicates } from '@kit.ArkData';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { fileIo, fileUri } from '@kit.CoreFileKit';
import { http } from '@kit.NetworkKit';
// 获取应用文件路径
let context = getContext(this) as common.UIAbilityContext;
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
let filesDir = context.filesDir;
let url='https://img.alicdn.com/imgextra/i4/O1CN01aG16y424E11XsURUd_!!6000000007358-2-tps-206-240.png'
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
aboutToAppear(): void {
}
build() {
RelativeContainer() {
Text(this.message)
.id('HelloWorld')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
}).onClick(() => {
saveImage()
})
}
.height('100%')
.width('100%')
}
}
async function saveImage() {
console.info('ShowAssetsCreationDialogDemo.');
let uri = fileUri.getUriFromPath(filesDir + '/1.jpg');
try {
// 获取需要保存到媒体库的位于应用沙箱的图片/视频uri
let srcFileUris: Array<string> = [
uri// 实际场景请使用真实的uri
];
let photoCreationConfigs: Array<photoAccessHelper.PhotoCreationConfig> = [
{
title: '1', // 可选
fileNameExtension: 'jpg',
photoType: photoAccessHelper.PhotoType.IMAGE,
subtype: photoAccessHelper.PhotoSubtype.DEFAULT, // 可选
}
];
let desFileUris: Array<string> = await phAccessHelper.showAssetsCreationDialog(srcFileUris, photoCreationConfigs);
console.info('showAssetsCreationDialog success, data is ' + desFileUris);
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 (http.ResponseCode.OK === data.responseCode) {
let imageBuffer: ArrayBuffer = data.result as ArrayBuffer;
try {
let file = await fileIo.open(desFileUris[0], fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE)
// 写入文件
await fileIo.write(file.fd, imageBuffer);
// 关闭文件
await fileIo.close(file.fd);
} catch (error) {
console.error("error is " + JSON.stringify(error))
}
} else {
console.error("error occurred when image downloaded!")
}
}
})
} catch (err) {
console.error('showAssetsCreationDialog failed, errCode is ' + err.code + ', errMsg is ' + err.message);
}
}
更多关于HarmonyOS鸿蒙Next中如何下载图片类型的文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中下载图片类型的文件,可以使用Download
模块。首先需要导入[@ohos](/user/ohos).net.download
模块,然后通过download
方法指定下载的URL和文件保存路径。具体步骤如下:
-
导入
Download
模块:import download from '[@ohos](/user/ohos).net.download';
-
设置下载的URL和保存路径:
let url = 'https://example.com/image.jpg'; let filePath = 'path/to/save/image.jpg';
-
调用
download
方法开始下载:download.downloadFile(url, filePath, (err, data) => { if (err) { console.error('Download failed:', err); } else { console.log('Download successful:', data); } });
-
处理下载结果。下载完成后,可以在回调函数中处理下载成功或失败的情况。
需要注意的是,下载文件需要网络权限,确保在config.json
中配置了相应的权限:
{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.INTERNET"
}
]
}
}
在HarmonyOS鸿蒙Next中下载图片类型文件,可以通过以下步骤实现:
-
使用HttpURLConnection:创建HttpURLConnection连接,设置请求方法为GET,获取输入流后保存为图片文件。
-
使用第三方库:如OkHttp,简化网络请求,下载图片并保存到指定路径。
-
使用DownloadManager:适用于系统级下载,通过创建下载请求并指定保存路径进行下载。
无论哪种方法,都需要确保应用具有网络权限和存储权限。