HarmonyOS 鸿蒙Next 如何将下载的图片缓存到沙盒里面,以便重复使用

发布于 1周前 作者 eggper 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何将下载的图片缓存到沙盒里面,以便重复使用

下面我写的代码中意图,将下载的文件写入filePath,然后当第二次来下载时,我会去先判断是否存在缓存文件。
现在遇到的问题是,第一次下载成功并写入到filePath中,第二次判断也存在此filePath,但是无法正常显示filePath的数据。
所以这里因该是我的缓存写错了,想请教指正一下。

///下载任务
static downloadWithFile(context:common.UIAbilityContext,params:DownloadParams,callback:(code:number,msg:string,path:string)=>void,progress?:(receivedSize:number,totalSize:number)=>void){
const filePathSuffix = DownloadUtil.guessFileName(params.url)
const filePath = context.filesDir + "/" + filePathSuffix
const uri = fileUri.getUriFromPath(filePath);
try {
const isExit = fileIo.accessSync(filePath,fileIo.OpenMode.READ_WRITE)
if(isExit){
LogUtil.info(`${DownloadUtil.TAG} downalod file is Already success, do not need downalod again`);
callback(0,"已下载成功",uri)
return
}
request.downloadFile(context, {
header:params.headers,
url: params.url,
filePath: filePath,
title:params.title,
description:params.description,
enableMetered:true

}, (err: BusinessError, data: request.DownloadTask) => {
///错误码文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-request-V5#%E4%B8%8B%E8%BD%BD%E4%BB%BB%E5%8A%A1%E7%9A%84%E9%94%99%E8%AF%AF%E7%A0%81
///https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/errorcode-request-V5#section13400002-%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84%E5%BC%82%E5%B8%B8
if (err) {
callback(err.code,err.message,uri)
LogUtil.error(`${DownloadUtil.TAG} Failed to request the download. Code: ${err.code}, message: ${err.message}`);
return;
}
let downloadTask: request.DownloadTask = data;

///下载失败的回调
let failCallback = (code: number) => {
const msg = DownloadUtil.getFailCallbackMsgByCode(code)
LogUtil.error(`${DownloadUtil.TAG} Failed to download the task. Code: ${code}`);
///取消进度监听
downloadTask.off('progress');
callback(code,msg,uri)
};
downloadTask.on('fail', failCallback);

///下载完毕的回调
let completeCallback = () => {
let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE);
fileIo.closeSync(file);
LogUtil.info(`${DownloadUtil.TAG} request the download complete data:${data}}`);
///取消进度监听
downloadTask.off('progress');
callback(HttpConstant.HTTP_SUCCESS,"下载完成",uri)
};
downloadTask.on('complete', completeCallback);

if(progress){
///下载进度的回调
let progressCallback = (receivedSize:number,totalSize:number) => {
progress(receivedSize,totalSize)
};
downloadTask.on('progress', progressCallback);
}
});
} catch (error) {
let err = error as BusinessError
let code = HttpConstant.HTTP_FAULT_DOWNLOAD
if(err.code && err.code != 0){
code = err.code
}
callback(code,JSON.stringify(err),uri)
}
}

更多关于HarmonyOS 鸿蒙Next 如何将下载的图片缓存到沙盒里面,以便重复使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
沙箱文件下载的文件是可以正常使用,可以在下载后打印uri返回地址,再使用Device File Browser访问设备文件,查看文件夹下是否是该文件,是的话,右键保存到本地看是否能正常使用。
参考文档:‘https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-device-file-explorer-V5#section165192211111

更多关于HarmonyOS 鸿蒙Next 如何将下载的图片缓存到沙盒里面,以便重复使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,将下载的图片缓存到沙盒(沙箱)里面以便重复使用,可以通过以下步骤实现:

  1. 下载图片:使用网络请求库(如libcurl)下载图片数据。确保在CMakeLists中导入相关库文件,并正确处理网络请求。
  2. 获取沙盒路径:通过系统API获取应用的沙盒目录路径。这通常是应用私有存储区域,确保数据的安全性和隐私性。
  3. 保存图片到沙盒:使用文件IO操作(如fs.open和fs.write)将下载的图片数据写入到沙盒目录中。确保文件名的唯一性,避免覆盖已有文件。
  4. 管理缓存:为了优化性能和资源使用,可以使用LRUCache等缓存策略来管理图片缓存。设置合适的缓存大小限制,并根据设备内存水平动态调整缓存策略。

通过上述步骤,你可以将下载的图片缓存到HarmonyOS鸿蒙Next的沙盒中,并在需要时重复使用这些图片。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部