HarmonyOS 鸿蒙Next 下载pdf文件并保存到用户文件目录
HarmonyOS 鸿蒙Next 下载pdf文件并保存到用户文件目录
我想要实现一个pdf预览,我是通过request下载文件到沙箱环境,再使用webview打开沙箱环境中的文件,我还需要实现将文件保存到用户目录下,我是用文件选择器保存后文件是0b,也无法打开文件,有大佬知道咋弄不
可以参考下demo
import { BusinessError, request } from '[@kit](/user/kit).BasicServicesKit';
import picker from '[@ohos](/user/ohos).file.picker';
import fs from '[@ohos](/user/ohos).file.fs';
import { common } from '[@kit](/user/kit).AbilityKit';
import { buffer } from '[@kit](/user/kit).ArkTS';
[@Entry](/user/Entry)
[@Component](/user/Component)
struct DocumentSave {
[@State](/user/State) message: string = '下载文件';
build() {
RelativeContainer() {
Text(this.message)
.id('DocumentSaveHelloWorld')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.fontColor(Color.Pink)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
.onClick(()=>{
const context = getContext(this);
const downloadUrl = '文件链接名.pdf';
try {
request.downloadFile(context, {
enableMetered: true,
url: downloadUrl,
filePath: context.filesDir + '/aa.pdf'
}).then((downloadTask: request.DownloadTask) => {
downloadTask.on('fail', (err: number) => {
console.error(`Failed to download the task. Code: ${err}`);
});
downloadTask.on('progress', (receivedSize: number, totalSize: number) => {
console.log('download', "receivedSize:" + (receivedSize / 1024) + " totalSize:" + (totalSize / 1024));
});
downloadTask.on('complete', () => {
//将文件复制到文件夹中
const documentSaveOptions = new picker.DocumentSaveOptions(); // 创建文件管理器保存选项实例
documentSaveOptions.newFileNames = ["aaa.pdf"]; // 保存文件名(可选)
const documentViewPicker = new picker.DocumentViewPicker;
documentViewPicker.save(documentSaveOptions)
.then(async (documentSaveResult) => {
// 获取到到图片或者视频文件的URI后进行文件读取等操作
let uri = documentSaveResult[0];
console.info('pub uri:' + uri)
// 沙箱路径文件
let sanFile = fs.openSync(context.filesDir+ '/aa.pdf', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
let pubFile = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
// 将文件从沙箱路拷贝到公共路径
fs.copyFileSync(sanFile.fd, pubFile.fd)
console.log("-------")
})
console.log('下载完成')
})}
// 下载完成
)
.catch((err: BusinessError) => {
console.error(`Invoke downloadTask failed, code is ${err.code}, message is ${err.message}`);
});
} catch (error) {
let err: BusinessError = error as BusinessError;
console.error(`Invoke downloadFile failed, code is ${err.code}, message is ${err.message}`);
}
})
}
.height('100%')
.width('100%')
}
}
更多关于HarmonyOS 鸿蒙Next 下载pdf文件并保存到用户文件目录的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS 鸿蒙Next系统中,下载PDF文件并保存到用户文件目录的步骤如下:
-
请求权限:首先,应用需要申请必要的权限,包括网络访问权限(用于下载文件)和读写存储权限(用于保存文件)。在应用的manifest文件中添加相关权限声明。
-
创建下载任务:使用HarmonyOS提供的网络请求API(如ArkUI中的fetch API)发起对PDF文件URL的GET请求,以获取文件内容。
-
处理响应:下载完成后,将响应的二进制数据保存为PDF文件。可以使用系统提供的文件操作API(如ArkUI中的file模块)来实现文件的创建和写入。
-
保存到用户文件目录:将生成的PDF文件保存到应用专有的用户文件目录中。HarmonyOS提供了特定的API来访问和操作应用私有目录。
-
路径返回:下载并保存完成后,返回文件的保存路径给用户,或者在应用内显示该PDF文件。
示例代码(简化):
let url = "PDF文件URL";
fetch(url).then(response => response.blob()).then(blob => {
let filePath = "/storage/emulated/0/YourAppDir/filename.pdf";
file.writeFile(filePath, blob);
});
请注意,实际代码中需要处理错误情况,并根据需求调整文件路径和文件名。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html