鸿蒙Next中如何将base64字符串转成pdf文件保存到手机并供用户查看
在鸿蒙Next开发中,如何将接收到的base64字符串转换为PDF文件并保存到手机本地?保存后需要支持用户直接打开查看,具体应该怎么实现?求代码示例或关键API说明。
2 回复
在鸿蒙Next中,可以使用以下步骤将base64字符串转为PDF并保存:
- 添加文件操作权限(在module.json5中配置):
"requestPermissions": [
{
"name": "ohos.permission.WRITE_USER_STORAGE"
}
]
- 核心代码实现:
import fs from '@ohos.file.fs';
import buffer from '@ohos.buffer';
// base64转PDF
let base64Str = '你的base64字符串';
let pdfData = buffer.from(base64Str, 'base64');
// 保存文件
let context = getContext(this);
let path = context.filesDir + '/document.pdf';
try {
let file = fs.openSync(path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
fs.writeSync(file.fd, pdfData.buffer);
fs.closeSync(file);
// 使用系统能力打开文件
let want = {
action: 'ohos.want.action.viewData',
parameters: {
'ability.picker.type': 'document-picker',
'ability.picker.filePaths': [path],
'ability.picker.fileTypes': ['pdf']
}
};
await context.startAbility(want);
} catch (error) {
console.error('保存失败:' + error);
}
注意:实际使用时需要处理base64字符串格式(去掉data:application/pdf;base64,前缀),并确保有存储权限。
更多关于鸿蒙Next中如何将base64字符串转成pdf文件保存到手机并供用户查看的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙Next(HarmonyOS NEXT)中,可以通过以下步骤将Base64字符串转换为PDF文件并保存到手机,同时允许用户查看:
步骤说明:
- 解码Base64字符串:将Base64字符串转换为字节数组。
- 创建文件路径:指定保存PDF文件的目录(例如应用沙箱目录)。
- 写入文件:将字节数据写入文件。
- 使用系统能力打开文件:调用系统文件查看器供用户查看。
示例代码(ArkTS):
import fs from '@ohos.file.fs';
import common from '@ohos.app.ability.common';
// Base64字符串转PDF文件并保存
async function saveBase64ToPdf(base64Str: string, context: common.UIAbilityContext) {
try {
// 1. 解码Base64字符串
let bytes = base64Decode(base64Str);
// 2. 获取应用文件目录路径
let filesDir = context.filesDir;
let filePath = filesDir + '/document.pdf';
// 3. 创建并写入文件
let file = fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);
fs.writeSync(file.fd, bytes);
fs.closeSync(file);
// 4. 使用系统能力打开PDF文件
let want = {
action: 'ohos.want.action.viewData',
uri: filePath,
type: 'application/pdf'
};
await context.startAbility(want);
console.log('PDF文件已保存并打开:' + filePath);
} catch (error) {
console.error('保存PDF失败:' + JSON.stringify(error));
}
}
// Base64解码函数
function base64Decode(base64Str: string): Uint8Array {
// 使用TextEncoder进行Base64解码(需确保字符串无前缀)
let binaryString = atob(base64Str);
let bytes = new Uint8Array(binaryString.length);
for (let i = 0; i < binaryString.length; i++) {
bytes[i] = binaryString.charCodeAt(i);
}
return bytes;
}
注意事项:
- 权限配置:在
module.json5中声明文件读写权限:{ "module": { "requestPermissions": [ { "name": "ohos.permission.READ_MEDIA", "reason": "$string:reason" }, { "name": "ohos.permission.WRITE_MEDIA", "reason": "$string:reason" } ] } } - Base64字符串处理:确保传入的字符串是纯Base64内容(无
data:application/pdf;base64,前缀)。 - 文件路径:使用沙箱目录确保应用隔离,也可使用外部存储目录(需用户授权)。
总结:
通过以上代码,可以高效地将Base64字符串转换为PDF文件,并调用系统能力直接打开文件供用户查看。整个过程兼顾了安全性和用户体验。

