// 调用鸿蒙摄像头插件
export function openCamera(): Promise<string> {
console.log('#################################### 调用成功')
return new Promise(async (resolve, reject) => {
try {
const pickerProfile : picker.PickerProfile = {
cameraPosition: camera.CameraPosition.CAMERA_POSITION_FRONT
};
const pickerResult : picker.PickerResult = await picker.pick(getContext(),
[picker.PickerMediaType.PHOTO], pickerProfile);
if (pickerResult.resultCode === 0) {
// 文件复制和读取逻辑
const file = fs.openSync(pickerResult.resultUri, fs.OpenMode.READ_ONLY)
const photoSize = fs.statSync(file.fd).size;
const buffer1 = new ArrayBuffer(photoSize);
fs.readSync(file.fd, buffer1);
const base64Str : string = buffer.from(buffer1).toString('base64')
resolve(base64Str);
console.log('#################################### 调用成功', base64Str)
fs.closeSync(file);
} else {
console.error('Picker 调用失败,resultCode:', pickerResult.resultCode);
reject(new Error(`Picker 调用失败,resultCode: ${pickerResult.resultCode}`));
}
} catch (error) {
let err = error as BusinessError;
console.error('调用摄像头或读取文件时出错:', err);
reject(error);
}
});
}

- 发布:2025-04-03 11:08
- 更新:2025-04-03 11:14
- 阅读:27
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: 1
HBuilderX类型: 正式
HBuilderX版本号: 4.57
手机系统: Android
手机系统版本号: Android 14
手机厂商: OPPO
手机机型: PJV110
页面类型: nvue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
// 调用鸿蒙摄像头插件
export function openCamera(): Promise<string> {
console.log('#################################### 调用成功')
return new Promise(async (resolve, reject) => {
try {
const pickerProfile : picker.PickerProfile = {
cameraPosition: camera.CameraPosition.CAMERA_POSITION_FRONT
};
const pickerResult : picker.PickerResult = await picker.pick(getContext(),
[picker.PickerMediaType.PHOTO], pickerProfile);
if (pickerResult.resultCode === 0) {
// 文件复制和读取逻辑
const file = fs.openSync(pickerResult.resultUri, fs.OpenMode.READ_ONLY)
const photoSize = fs.statSync(file.fd).size;
const buffer1 = new ArrayBuffer(photoSize);
fs.readSync(file.fd, buffer1);
const base64Str : string = buffer.from(buffer1).toString('base64')
resolve(base64Str);
console.log('#################################### 调用成功', base64Str)
fs.closeSync(file);
} else {
console.error('Picker 调用失败,resultCode:', pickerResult.resultCode);
reject(new Error(`Picker 调用失败,resultCode: ${pickerResult.resultCode}`));
}
} catch (error) {
let err = error as BusinessError;
console.error('调用摄像头或读取文件时出错:', err);
reject(error);
}
});
}
// 调用鸿蒙摄像头插件
export function openCamera(): Promise<string> {
console.log('#################################### 调用成功')
return new Promise(async (resolve, reject) => {
try {
const pickerProfile : picker.PickerProfile = {
cameraPosition: camera.CameraPosition.CAMERA_POSITION_FRONT
};
const pickerResult : picker.PickerResult = await picker.pick(getContext(),
[picker.PickerMediaType.PHOTO], pickerProfile);
if (pickerResult.resultCode === 0) {
// 文件复制和读取逻辑
const file = fs.openSync(pickerResult.resultUri, fs.OpenMode.READ_ONLY)
const photoSize = fs.statSync(file.fd).size;
const buffer1 = new ArrayBuffer(photoSize);
fs.readSync(file.fd, buffer1);
const base64Str : string = buffer.from(buffer1).toString('base64')
resolve(base64Str);
console.log('#################################### 调用成功', base64Str)
fs.closeSync(file);
} else {
console.error('Picker 调用失败,resultCode:', pickerResult.resultCode);
reject(new Error(`Picker 调用失败,resultCode: ${pickerResult.resultCode}`));
}
} catch (error) {
let err = error as BusinessError;
console.error('调用摄像头或读取文件时出错:', err);
reject(error);
}
});
}
预期结果:
预期的结果是,返回base64编码给nvue文件,那边调用接口
预期的结果是,返回base64编码给nvue文件,那边调用接口
实际结果:
uts文件没有返回,经多次测试,图片过大,base64编码的数据太大了,传不过来
uts文件没有返回,经多次测试,图片过大,base64编码的数据太大了,传不过来
bug描述:
uniapp+vue3.0 ,适配鸿蒙的时候,需要做一个前置相机拍照的功能,因为后端要的是base64格式,我在uniapp的uni_module创建了uts文件,但是导致的问题是,无法转换base64,nvue文件一直拿不到base64格式的编码。 各位大佬都什么好的解决方案吗?在线等,很着急
1 个回复
DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信
如之前沟通,目前发现返回的字符串数据量比较大,初步测试有 600w 的长度,无法正确返回。
目前返回的 arraybuffer 看起来有问题,导致不能正确转成 base64。
可以看到返回临时文件的 url 可以进行 upload
目前会跟进此问题。