在我的WebView中,它会加载一个网页,其中包含一个用base64数据下载图像的链接:
<a href="data:image/jpeg;base64,{base64data}" download="fileName.jpg" target="_blank">Download Image</a>
在Chrome中点击它时,它会将图像下载为JPG文件。但它在Android WebView中不起作用。
Download Images using android webview表示我应该使用shouldOverrideUrlLoading()
来触发下载。
它适用于像http://.../image.jpg
这样的图片网址。但对于我的base 64数据网址,它仅适用于4.4以下的Android版本,方法shouldOverrideUrlLoading()
永远不会在Android 4.4+上调用,因为根据Android API Guides,它必须是有效的网址。
所以我的问题是,为什么data:image/jpeg;base64,{base64data}
在这种情况下不是有效的网址?如何触发base64数据网址shouldOverrideUrlLoading()
? (或甚至在网页上进行更改)
任何建议都会受到高度赞赏,我只需要在Android中保存图片。
答案 0 :(得分:2)
如果您需要为您的数据触发shouldOverrideUrlLoading
:URI,只需从download="fileName.jpg" target="_blank"
标记中删除<a>
部分即可。
实际上,download
属性阻止shouldOverrideUrlLoading
被调用,但target="_blank"
对任何事情都没有帮助,所以它也应该删除。您只需要从true
返回shouldOverrideUrlLoading
,以避免WebView实际导航到图片链接。
我想,这种行为的解释是图像由WebView内部处理,因此不考虑下载,请参阅
DownloadListener doesn't download images?但我同意让download
属性在KitKat之前工作有点奇怪。
但是,当您按照Download Images using android webview的建议时,您面临的下一个问题是DownloadManager
无法处理数据:URIs :)您可以做的只是使用Base64 utils将base64编码的图像转换为二进制blob,并自行保存 - 这样,您就可以有效地下载图像。