HarmonyOS鸿蒙Next中通过系统相机拍照和录像(CameraPicker)示例获取resultUri后,Image能正常显示但图片链接转base64失败问题
HarmonyOS鸿蒙Next中通过系统相机拍照和录像(CameraPicker)示例获取resultUri后,Image能正常显示但图片链接转base64失败问题 通过官方示例,成功获取拍照结果result
再根据示例将图片转换为base64图片,然后了解到必须要将file://com.example.myapptest/data/storage/el2/base/haps/entry/files/1755244017721.tmp去掉file://com.example.myapptest/以data开头再传入方法处理才行,不然会进程中断,无法得到arrayBuffer,
传入路径,但得到了空对象,导致后续转换的base64文件无法正常显示,想问已经按照官方示例,但是出现这样的问题,是我漏了什么没注意还是因为什么原因,
更多关于HarmonyOS鸿蒙Next中通过系统相机拍照和录像(CameraPicker)示例获取resultUri后,Image能正常显示但图片链接转base64失败问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,使用CameraPicker获取resultUri后,若Image能显示但转base64失败,可能是文件权限或URI解析问题。需检查:
- 确保使用正确的uri转换API:
globalThis.context.resourceManager.getMediaContent
处理媒体URI - 验证文件读取权限:在module.json5中声明
ohos.permission.READ_MEDIA
权限 - 使用
fileIo
接口读取文件时,确认URI有效性,可通过fs.accessSync(uri)
检查
典型代码片段:
const file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
const buffer = new ArrayBuffer(file.length);
fs.readSync(file.fd, buffer);
const base64 = base64.encodeFromArrayBuffer(buffer);
fs.closeSync(file);
更多关于HarmonyOS鸿蒙Next中通过系统相机拍照和录像(CameraPicker)示例获取resultUri后,Image能正常显示但图片链接转base64失败问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这个问题是由于文件路径处理不当导致的。在HarmonyOS Next中,CameraPicker返回的URI需要正确处理才能获取到文件内容。
关键点:
- 不要手动拼接或修改URI路径,应该使用官方提供的API来获取文件内容
- 正确的处理方式应该是:
import fs from '@ohos.file.fs';
async function getFileBase64(uri: string) {
try {
// 直接使用uri打开文件
let file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
let stat = fs.statSync(uri);
let arrayBuffer = new ArrayBuffer(stat.size);
fs.readSync(file.fd, arrayBuffer);
fs.closeSync(file);
// 转换为base64
let base64 = arrayBufferToBase64(arrayBuffer);
return base64;
} catch (error) {
console.error('Failed to read file: ' + JSON.stringify(error));
return null;
}
}
function arrayBufferToBase64(buffer: ArrayBuffer) {
let binary = '';
let bytes = new Uint8Array(buffer);
for (let i = 0; i < bytes.byteLength; i++) {
binary += String.fromCharCode(bytes[i]);
}
return window.btoa(binary);
}
调用方式:
let base64 = await getFileBase64(resultUri); // 直接传入CameraPicker返回的URI
这样处理可以避免路径转换问题,直接使用系统API读取文件内容。如果仍然遇到问题,可能是权限配置不正确,请检查是否在config.json中声明了所需的文件访问权限。