HarmonyOS 鸿蒙Next 将单个应用沙盒中的文件传出到手机中

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 将单个应用沙盒中的文件传出到手机中

应用A目录中有个名为8Mine.pdf的文件,路径如下
let context = LOGlobalContext.getAbilityContext()
let filesDir = context.filesDir;
let destFile = filesDir + ‘xxx/pdf’
我怎样可以将这个文件存储到手机系统中,然后在手机’文件’ App中可以看到这个文件


更多关于HarmonyOS 鸿蒙Next 将单个应用沙盒中的文件传出到手机中的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

可以使用DocumentViewPicker来保存

import { common } from '[@kit](/user/kit).AbilityKit';
import { BusinessError, request } from '[@kit](/user/kit).BasicServicesKit';
import fs from '[@ohos](/user/ohos).file.fs';
import { buffer } from '[@kit](/user/kit).ArkTS';
import { picker, storageStatistics } from '[@kit](/user/kit).CoreFileKit';
import { webview } from '[@kit](/user/kit).ArkWeb';

let context = getContext(this) as common.UIAbilityContext;


[@Entry](/user/Entry)
[@Component](/user/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,
           background: true,
           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


在HarmonyOS鸿蒙Next系统中,将单个应用沙盒中的文件传出到手机中,可以通过以下步骤实现:

  1. 获取文件路径:首先,应用需要在沙盒中获取到目标文件的完整路径。这通常是通过应用自身的文件管理系统API完成的。

  2. 申请权限:确保应用已经获得了读取沙盒文件以及写入外部存储(如手机内部存储)的权限。在HarmonyOS中,这需要在应用的manifest文件中声明相关权限,并在运行时请求用户授权。

  3. 文件传输:使用HarmonyOS提供的文件传输API,将沙盒中的文件内容读取出来,并写入到指定的手机存储位置。这通常涉及到文件读取、数据缓冲区处理以及文件写入等操作。

  4. 确认传输完成:在文件传输完成后,应用需要确认文件已经成功写入到手机存储中,并可以进行必要的后续处理,如通知用户文件已传出。

请注意,上述步骤的具体实现会依赖于HarmonyOS的API和SDK版本,以及应用的具体需求和设计。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部