HarmonyOS 鸿蒙Next如何长按下载webview中的图片
HarmonyOS 鸿蒙Next如何长按下载webview中的图片
我的代码如下,长按弹出提示框。但是得到一个base64编码的数据后,如何写入相册中?
Web({ src: '', controller: this.webviewController })
.onContextMenuShow((event) => {
if (event) {
let mediaType = event.param.getMediaType()
let hitValue = this.webviewController.getHitTestValue()
let imgBase64 = hitValue.extra
//长按的是图片,且图片是base64的,因getSourceUrl没取到,用extra取到了
if (mediaType === ContextMenuMediaType.Image && imgBase64.startsWith("data:image")) {
let dialogData: AlertDialogParamWithOptions = {
message: $r('app.string.text_tips_title'),
buttons: [{
value: $r('app.string.tips_save_pic'),
action: () => {
}
}],
buttonDirection: DialogButtonDirection.VERTICAL
}
AlertDialog.show(dialogData)
}
}
return false
})
更多关于HarmonyOS 鸿蒙Next如何长按下载webview中的图片的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
可以参考如下方法:
async saveBase64Image(base64Str:string) {
try {
const context = getContext(this);
let helper = photoAccessHelper.getPhotoAccessHelper(context);
let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'png')
let imageStr = base64Str.split(',')[1];
//打开文件
let file = fs.openSync(uri, fs.OpenMode.READ_WRITE);
//base64字符串转成buffer
const decodeBuffer = buffer.from(imageStr, 'base64').buffer;
//写入文件
fs.writeSync(file.fd, decodeBuffer);
//关闭文件
fs.closeSync(file);
} catch (e) {
console.error(e);
}
}
更多关于HarmonyOS 鸿蒙Next如何长按下载webview中的图片的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS 鸿蒙Next系统中,长按下载webview中的图片通常涉及到自定义WebView的行为处理。以下是一个直接的方法来实现这一功能:
-
拦截长按事件:首先,需要自定义WebView组件,并重写其
onLongPress
方法(或类似的事件监听方法,具体名称可能因版本而异),以便在webview中捕获长按事件。 -
获取图片URL:在长按事件中,通过WebView的API获取当前触摸位置的元素信息,特别是图片元素的URL。这通常涉及到JavaScript的注入和执行,以获取当前触摸点的
<img>
标签的src
属性。 -
下载图片:一旦获取到图片的URL,就可以利用HarmonyOS提供的网络请求API(如
HttpURLConnection
或HttpClient
,鸿蒙特有API)来下载图片,并保存到设备的存储中。 -
提示用户:下载完成后,可以通过Toast或其他UI组件提示用户图片已下载,并可以选择显示下载路径。
注意,上述步骤中的具体API和方法调用可能随HarmonyOS的版本有所不同。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html