示例参考如下:import { BusinessError, request } from '@kit.BasicServicesKit'; import picker from '@ohos.file.picker'; import fs from '@ohos.file.fs'; import { common } from '@kit.AbilityKit'; import { buffer } from '@kit.ArkTS'; @Entry @Component struct DocumentSave { @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%') } }需要注意api 12后不能直接写入文件。
示例参考如下:
需要注意api 12后不能直接写入文件。