HarmonyOS 保存pdf文件到手机文件,打开保存的文件是白板?

将在线的pdf文件保存到系统文件管理。 在手机-文件管理找到刚保存的文件,打开是白板。 查看保存的pdf文件信息有实际大小。

阅读 482
1 个回答

示例参考如下:

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后不能直接写入文件。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进