@
Rheinmetal 兄台错矣,自己发请求下载要想得到 304,你得知道 Last-Modified/ETag 等信息,这些信息应该在 WebView 下面的缓存管理器里。再说即使得到 304,也还是要跟缓存管理器要 content。HTTPConnection 可不会自动帮你做这些事。(以上都是猜的未经验证)
(可能)可行的办法是:
1,自己做 WebView 的所有网络请求。顺带就可以自定义缓存并提供想要的任何接口了。
2,把 img 画在 canvas 上再导出 base64 再还原成文件(虽然已经不是服务器上原本的那个文件了)。
<script type="text/javascript">
function getBase64Image(img) {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, img.width, img.height);
var dataURL = canvas.toDataURL("image/png");
console.log(dataURL);
return dataURL
}
</script>
<img crossOrigin="Anonymous" src="
https://upload.ibesteeth.com/tmp/club/img/1513250107372f058df49.jpg" onclick="getBase64Image(this)"/>
但这样的实现有一个安全问题:默认 canvas 是在本地匿名域上的,img 不是,而默认的安全模型是不允许直接导出的。这也是需要 crossOrigin="Anonymous"的原因。如果 WebView 有什么办法处理跨域问题,应该就可以用起来了。
手头没有 Android 环境,lz 自己试试这个思路?