HarmonyOS 鸿蒙Next文件下载后文件夹内找不到对应文件
HarmonyOS 鸿蒙Next文件下载后文件夹内找不到对应文件 使用@ohos.request进行文件下载,但是在系统文件夹中找不到对应的文件,网络资源文件是不是仅支持下载至应用文件目录呢?如果是的话应用的文件目录在哪里呢?
又要如何实现文件下载到手机系统文件目录内呢?
-
文件下载,下载的是应用的沙箱目录,沙箱目录参考文档: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/app-sandbox-directory-V5#应用沙箱目录与应用沙箱路径
IDE右下角Device File Browser可以查看沙箱目录下的文件
-
沙箱文件保存到文件管理器参考:
import { common } from '@kit.AbilityKit';
import { BusinessError, request } from '@kit.BasicServicesKit';
import fs from '@ohos.file.fs';
import { buffer } from '@kit.ArkTS';
import { picker, storageStatistics } from '@kit.CoreFileKit';
import { webview } from '@kit.ArkWeb';
let context = this as common.UIAbilityContext;
@Entry
@Component
struct testPdfSave {
testIndex: number = 0;
build() {
Column() {
Button('保存').onClick(() => {
let filePath = context.cacheDir + "/test" + this.testIndex + ".pdf";
this.testIndex = this.testIndex + 1
let url = "https://gitee.com/harmonyos-cases/cases/raw/master/CommonAppDevelopment/feature/webpdfviewer/src/main/resources/rawfile/sample.pdf"
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.pdf"]; // 保存文件名(可选)
documentSaveOptions.fileSuffixChoices = ['']; // 保存文件类型(可选)
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}`);
}
})
}
.height('100%')
.width('100%')
}
}
更多关于HarmonyOS 鸿蒙Next文件下载后文件夹内找不到对应文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
请教下,let file2 = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
你这里是打开公共目录文件嘛,我本地这么执行直接就报错了,错误码是13900001,说是操作不允许,是这么搞吗,还是要有啥前提?
针对帖子标题“HarmonyOS 鸿蒙Next文件下载后文件夹内找不到对应文件”的问题,可能的原因及解决方法如下:
-
文件隐藏:鸿蒙系统可能默认隐藏了某些文件或文件夹。请检查文件夹的查看选项,确保设置为显示所有文件,包括隐藏文件。
-
下载路径问题:下载时可能指定了特定的下载路径,或者浏览器/下载管理器自动更改了下载位置。请检查下载设置或浏览器的下载历史,确认文件的确切下载位置。
-
文件名更改:下载的文件可能被自动重命名,或者由于系统字符集问题导致文件名显示异常。尝试在文件管理器中搜索文件内容的关键字,可能有助于找到文件。
-
下载未完成:如果下载过程中出现异常中断,可能导致文件不完整或根本未保存。请检查下载任务的状态,必要时重新下载。
-
文件管理器权限:确保您使用的文件管理器具有访问下载文件夹的权限。在某些情况下,权限设置可能阻止访问特定文件夹。
如果以上方法均无法解决问题,请考虑检查设备的存储空间是否已满,或者尝试使用其他文件管理器应用。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html,