HarmonyOS 鸿蒙Next 将单个应用沙盒中的文件传出到手机中
HarmonyOS 鸿蒙Next 将单个应用沙盒中的文件传出到手机中
let context = LOGlobalContext.getAbilityContext()
let filesDir = context.filesDir;
let destFile = filesDir + ‘xxx/pdf’
我怎样可以将这个文件存储到手机系统中,然后在手机’文件’ App中可以看到这个文件
更多关于HarmonyOS 鸿蒙Next 将单个应用沙盒中的文件传出到手机中的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
可以使用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系统中,将单个应用沙盒中的文件传出到手机中,可以通过以下步骤实现:
-
获取文件路径:首先,应用需要在沙盒中获取到目标文件的完整路径。这通常是通过应用自身的文件管理系统API完成的。
-
申请权限:确保应用已经获得了读取沙盒文件以及写入外部存储(如手机内部存储)的权限。在HarmonyOS中,这需要在应用的manifest文件中声明相关权限,并在运行时请求用户授权。
-
文件传输:使用HarmonyOS提供的文件传输API,将沙盒中的文件内容读取出来,并写入到指定的手机存储位置。这通常涉及到文件读取、数据缓冲区处理以及文件写入等操作。
-
确认传输完成:在文件传输完成后,应用需要确认文件已经成功写入到手机存储中,并可以进行必要的后续处理,如通知用户文件已传出。
请注意,上述步骤的具体实现会依赖于HarmonyOS的API和SDK版本,以及应用的具体需求和设计。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html