从网络视图中的本地私有目录加载图像
Load Image from local private directory in a webview
上下文:
我的应用有时会显示 "Sheets",这是 html 个包含文本和图像的文件:
<p>image description </p>
<p><img src="/api/medias/get/videos/56afad6447eba61c8099544b?thumbnail=true&company=4f86d0a9d655ab9794f5d1d2&fullSizedCover=true"
alt=""
data-id="56afad6447eba61c8099544b"
data-type="video" data-width="640" data-height="1136" /></p>
那我用body.loadDataWithBaseURL(<my api url>, body, "text/html; charset=UTF-8", null, null);
我认为它不相关,但我会说以防万一,我有一个包含 css 和 javascript 的模板正文。 js 脚本检测图像点击并将 "data-id" 传输到 android 方法(通过 JavascriptInterface
)。在这种情况下,它会打开一个视频播放器并播放它。
问题:
我的应用程序允许用户下载这些表格以供以后离线可视化。所以我下载 html,然后将图像下载到我的本地私有目录 (Context.getFileDir()
) 并更改 html 的 src 以将 "thumbnail" 源设置为图像下载:
<p>video</p>
<p><img src="69c623955ecb5bd414f908cd383f3809.jpg"
alt=""
data-id="56afad6447eba61c8099544b"
data-type="video" data-width="640" data-height="360" /></p>
我的问题是:我将什么作为基础 url 放入我的 webview 以获得预期的行为(即:显示下载的图像)。
我尝试了 Context.getFileDir().getAbsolutePath()
、content://com.android.htmlfileprovider
和其他一些方法。
我应该采取不同的做法吗?
非常感谢,
效果很好:
Picasso.with(iv.getContext()).load(new File(getContext().getFilesDir() + "/" + "69c623955ecb5bd414f908cd383f3809.jpg")).into(iv);
html :
<p>video</p>
<p><img src="69c623955ecb5bd414f908cd383f3809.jpg" alt="" data-id="56afad6447eba61c8099544b" data-type="video" data-width="640" data-height="360" /></p>
我的基地url:baseUrl = Uri.fromFile(getContext().getFilesDir()).toString();
最后:
webview.loadDataWithBaseURL(baseUrl, body, "text/html; charset=UTF-8", null, null);
如果您已经 downloaded/have 模板,您可以尝试使用 null baseUrl,并将该 html 模板作为正文传递给 webview。
在传递之前,在其中查找 img 标签,并使用本地存储文件的完整路径设置 img src。像:
Document doc = Jsoup.parse(newHtml);
Elements elems = doc.getElementsByTag("img");
for (Element el : elems) {
String filename = el.attr("src"); //presumably only name
String picUri = "file:///" + folder + "/"+filename;
el.attr("src", picUri);
}
web.loadDataWithBaseURL(null, htmlBody, "text/html", "UTF-8", null);
上下文:
我的应用有时会显示 "Sheets",这是 html 个包含文本和图像的文件:
<p>image description </p>
<p><img src="/api/medias/get/videos/56afad6447eba61c8099544b?thumbnail=true&company=4f86d0a9d655ab9794f5d1d2&fullSizedCover=true"
alt=""
data-id="56afad6447eba61c8099544b"
data-type="video" data-width="640" data-height="1136" /></p>
那我用body.loadDataWithBaseURL(<my api url>, body, "text/html; charset=UTF-8", null, null);
我认为它不相关,但我会说以防万一,我有一个包含 css 和 javascript 的模板正文。 js 脚本检测图像点击并将 "data-id" 传输到 android 方法(通过 JavascriptInterface
)。在这种情况下,它会打开一个视频播放器并播放它。
问题:
我的应用程序允许用户下载这些表格以供以后离线可视化。所以我下载 html,然后将图像下载到我的本地私有目录 (Context.getFileDir()
) 并更改 html 的 src 以将 "thumbnail" 源设置为图像下载:
<p>video</p>
<p><img src="69c623955ecb5bd414f908cd383f3809.jpg"
alt=""
data-id="56afad6447eba61c8099544b"
data-type="video" data-width="640" data-height="360" /></p>
我的问题是:我将什么作为基础 url 放入我的 webview 以获得预期的行为(即:显示下载的图像)。
我尝试了 Context.getFileDir().getAbsolutePath()
、content://com.android.htmlfileprovider
和其他一些方法。
我应该采取不同的做法吗?
非常感谢,
效果很好:
Picasso.with(iv.getContext()).load(new File(getContext().getFilesDir() + "/" + "69c623955ecb5bd414f908cd383f3809.jpg")).into(iv);
html :
<p>video</p>
<p><img src="69c623955ecb5bd414f908cd383f3809.jpg" alt="" data-id="56afad6447eba61c8099544b" data-type="video" data-width="640" data-height="360" /></p>
我的基地url:baseUrl = Uri.fromFile(getContext().getFilesDir()).toString();
最后:
webview.loadDataWithBaseURL(baseUrl, body, "text/html; charset=UTF-8", null, null);
如果您已经 downloaded/have 模板,您可以尝试使用 null baseUrl,并将该 html 模板作为正文传递给 webview。 在传递之前,在其中查找 img 标签,并使用本地存储文件的完整路径设置 img src。像:
Document doc = Jsoup.parse(newHtml);
Elements elems = doc.getElementsByTag("img");
for (Element el : elems) {
String filename = el.attr("src"); //presumably only name
String picUri = "file:///" + folder + "/"+filename;
el.attr("src", picUri);
}
web.loadDataWithBaseURL(null, htmlBody, "text/html", "UTF-8", null);