HarmonyOS 如何下载pdf文件到公共目录,使用户可以看到

下载后的pdf文件,用户无法在手机找那个的文件目录查看。

HarmonyOS
2025-01-09 16:55:26
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

参考demo:

import { BusinessError, request } from '@kit.BasicServicesKit';
import picker from '@ohos.file.picker';
import fs from '@ohos.file.fs';

@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 = 'xxxx';
          // const downloadUrl = 'pdf链接';
          try {
            request.downloadFile(context, {
              enableMetered: true,
              url: downloadUrl,
              filePath: context.filesDir + '/b.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 = ["b.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+ '/b.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%')
  }
}
分享
微博
QQ
微信
回复
2025-01-09 20:04:07
相关问题
HarmonyOS 如何文件存储公共目录
483浏览 • 1回复 待解决
HarmonyOS获取公共下载目录api不可用
929浏览 • 1回复 待解决
HarmonyOS 如何下载文件本地
437浏览 • 1回复 待解决
java怎么读取公共目录下的文件
2712浏览 • 1回复 待解决
HarmonyOS 使用PDF kit预览PDF文件
355浏览 • 1回复 待解决