HarmonyOS 鸿蒙Next 系统相机拍照的图片在H5页面显示
HarmonyOS 鸿蒙Next 系统相机拍照的图片在H5页面显示
file://media/Photo/60/xxx/IMG_xxx.jpg
目前我们APP调用系统相机拍照得到的图片路径如上面的格式, 我怎么在H5页面显示这张图片, 以及我如何把这张图片上传到我们的服务器上面?
目前我们APP调用系统相机拍照得到的图片路径如上面的格式, 我怎么在H5页面显示这张图片, 以及我如何把这张图片上传到我们的服务器上面?
3 回复
注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用refresh接口生效。注册对象的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧JavaScript对象。
[@Entry](/user/Entry)
[@Component](/user/Component)
struct photo {
controller: web_webview.WebviewController = new web_webview.WebviewController();
[@State](/user/State) webPickImage: pickImage = new pickImage();
[@State](/user/State) webCameraImage: cameraImage = new cameraImage();
aboutToAppear(){
// 配置Web开启调试模式
web_webview.WebviewController.setWebDebuggingAccess(true);
}
build() {
Column() {
Button('refresh')
.onClick(() => {
try {
this.controller.refresh();
} catch (error) {
let e: business_error.BusinessError = error as business_error.BusinessError;
console.error(`ErrorCode: ${e.code}, Message: ${e.message}`);
}
})
Button('Register JavaScript To Window')
.onClick(() => {
try {
this.controller.registerJavaScriptProxy(this.webPickImage, "pickImageName", ["testPickImage"]);
this.controller.registerJavaScriptProxy(this.webCameraImage, "cameraImageName", ["testCameraImage"]);
} catch (error) {
let e: business_error.BusinessError = error as business_error.BusinessError;
console.error(`ErrorCode: ${e.code}, Message: ${e.message}`);
}
})
Web({ src: $rawfile('Test1128.html'), controller: this.controller })
.javaScriptAccess(true)
}
}
}
应用可以自行选择使用哪种API实现文件选择和文件保存的功能。该类接口,需要应用在界面UIAbility中调用,否则无法拉起photoPicker应用或FilePicker应用。图库选择器对象,用来支撑选择图片/视频和保存图片/视频等用户场景。选择文件推荐使用PhotoAccessHelper的PhotoViewPicker。在使用前,需要先创建PhotoViewPicker实例。
class pickImage {
constructor() {
}
testPickImage(): string {
try {
let PhotoSelectOptions = new picker.PhotoSelectOptions();
PhotoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
PhotoSelectOptions.maxSelectNumber = 5;
let photoPicker = new picker.PhotoViewPicker();
photoPicker.select(PhotoSelectOptions).then((PhotoSelectResult: picker.PhotoSelectResult) => {
console.info('PhotoViewPicker.select successfully, PhotoSelectResult uri: ' + JSON.stringify(PhotoSelectResult));
}).catch((err: BusinessError) => {
console.error('PhotoViewPicker.select failed with err: ' + JSON.stringify(err));
});
} catch (error) {
let err: BusinessError = error as BusinessError;
console.error('PhotoViewPicker failed with err: ' + JSON.stringify(err));
}
return '121';
}
}
class cameraImage {
constructor() {
}
testCameraImage(): string {
const context = getContext(this) as common.UIAbilityContext
context.startAbilityForResult({
action:"ohos.want.action.imageCapture",
parameters:{
callBundleName:"com.hm.imageshow"
}
},(err,data) => {
console.info("imageCapture:" + `${JSON.stringify(data)}`)
})
return '1221';
}
}
转base64,发送请求给服务器,然后通知原生更新
在HarmonyOS鸿蒙Next系统中,若相机拍照的图片在H5页面无法正常显示,这通常涉及几个可能的技术原因,包括但不限于图片格式兼容性、文件路径引用错误或权限设置不当等。
首先,请确保相机拍照后保存的图片格式(如JPEG、PNG)是H5页面所支持的。如果格式不兼容,图片将无法正确渲染。
其次,检查H5页面中引用图片的路径是否正确。如果图片存储在设备的本地存储中,需确保路径正确无误,并且H5页面具有访问该路径的权限。对于Web应用,可能需要通过特定的API或文件选择器来获取并显示本地图片。
此外,权限问题也是常见的原因之一。请确保你的应用已正确声明并请求了访问相机和存储的权限,同时用户已授权这些权限。
最后,如果图片是通过网络请求加载的,还需检查网络连接状态以及服务器端是否正确返回了图片资源。
如果以上步骤均确认无误但问题依旧存在,可能是系统或应用层面的特定问题。此时,建议联系HarmonyOS的官方技术支持以获取进一步的帮助。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。