HarmonyOS 鸿蒙Next 文件下载到哪个目录下才不会被清除?

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

HarmonyOS 鸿蒙Next 文件下载到哪个目录下才不会被清除?
我文件下载到getContext().cacheDir目录可以正常下载成功,但不久就会被自动清除了,想要持久保存下载的文件,我改到getContext().filesDir的话无法下载成功,似乎权限问题,也没有报错,就是文件写入不到filesDir目录里

request.downloadFile(getContext(), { url: "http://192.168.10.106/pic/yinyue/"+title+'.mp3' }).then((data: request.DownloadTask) => {

let downloadTask: request.DownloadTask = data;

let progressCallback = (receivedSize: number, totalSize: number) => {

this.downArr[index] = new DownloadModel(receivedSize, totalSize);

};

downloadTask.on('progress', progressCallback);

}).catch((err: BusinessError) => {

console.error(`Failed to request the download. Code: ${err.code}, message: ${err.message}`);

})

更多关于HarmonyOS 鸿蒙Next 文件下载到哪个目录下才不会被清除?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

参考以下代码:


import common from '[@ohos](/user/ohos).app.ability.common';

import fs from '[@ohos](/user/ohos).file.fs';

import request from '[@ohos](/user/ohos).request';

import { BusinessError } from '[@ohos](/user/ohos).base';

import buffer from '[@ohos](/user/ohos).buffer';

import { picker } from '[@kit](/user/kit).CoreFileKit';

[@Entry](/user/Entry)

[@Component](/user/Component)

struct Index {

 build() {

   Button().onClick(() => {

     let context = getContext(this) as common.UIAbilityContext;

     let filePath = context.filesDir + "/test.xlsx";

     let url = "xxx.xlsx"

     try {

       request.downloadFile(context, {

         url: url,

         filePath: filePath

       }).then((data: request.DownloadTask) => {

         let downloadTask: request.DownloadTask = data;

         downloadTask.on('complete', () => {

           console.info('download complete');

           let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);

           let arrayBuffer = new ArrayBuffer(4096000);

           let readLen = fs.readSync(file.fd, arrayBuffer);

           let buf = buffer.from(arrayBuffer, 0, readLen);

           console.info(`content of File: ${buf.toString()}`);

           let writeLen = fs.writeSync(file.fd, arrayBuffer);

           fs.closeSync(file);

           const documentSaveOptions = new picker.DocumentSaveOptions(); // 创建文件管理器选项实例

           // documentSaveOptions.newFileNames = ["1.xlsx"]; // 保存文件名(可选)

           // documentSaveOptions.fileSuffixChoices = ['xlsx']; // 保存文件类型(可选)

           let uris: Array<string> = [];

           const documentViewPicker = new picker.DocumentViewPicker(); // 创建文件选择器实例

           documentViewPicker.save(documentSaveOptions).then((documentSaveResult: Array<string>) => {

             uris = documentSaveResult;

             console.info('documentViewPicker.save to file succeed and uris are:' + uris);

             let uri = uris[0];

             let file2 = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);

             let writeLen2 = fs.writeSync(file2.fd, arrayBuffer);

             fs.closeSync(file2);

           }).catch((err: BusinessError) => {

             console.error(`Invoke documentViewPicker.save failed, code is ${err.code}, message is ${err.message}`);

           })

         })

         let failCallback = () => {

           console.info('Download task fail.');

         };

         downloadTask.on('fail', failCallback);

       }).catch((err: BusinessError) => {

         console.error(`downLoadFileTask failed, code is ${err.code}, message is ${err.message}`);

       });

     } catch (error) {

       console.error(`downLoadFileTask failed, code is ${error.code}, message is ${error.message}`);

     }

   })

 }

}

更多关于HarmonyOS 鸿蒙Next 文件下载到哪个目录下才不会被清除?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,为确保下载的文件不被系统自动清除,通常应将文件保存到系统的外部存储区域或者特定的应用专属存储目录下。

  1. 外部存储:这是指设备上的SD卡或扩展存储区域。将文件保存在此目录下,系统在进行清理或更新时一般不会触及这些文件。路径通常类似于/storage/emulated/0/Download(这是系统默认的下载目录,但用户可根据需要自行创建子目录)。

  2. 应用专属存储:每个应用都有自己专属的存储区域,系统默认不会清理这部分数据,除非用户手动卸载应用或清除应用数据。你可以在应用内设置文件保存路径到其专属存储目录,例如/data/user/0/你的应用包名/files

请确保你的应用有权限访问这些存储区域。对于外部存储,应用需要申请READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE权限;对于应用专属存储,则通常无需额外权限。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部