下载未设置网页视图的开始参数?如何检索文件名?



我有javascript代码,我使用锚标签的下载属性来设置文件名。 以下是我的代码片段:

const fileReader = new FileReader();
fileReader.onload = () => {
const link = <HTMLAnchorElement>windowService.document.createElement("a");
link.href = fileReader.result;
link.setAttribute("download", fileName);
link.target = "_blank";
windowService.document.body.appendChild(link);
link.click();
};
fileReader.readAsDataURL(testFile);
}

其中测试文件是数据的斑点。此代码适用于所有浏览器,iOS应用程序,但不适用于Android应用程序。 在 Android webView 上,调用 onDownloadListener 函数,只设置 url 参数,不设置其他参数。

webView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
// url: set as base64 encoded content
// no other attribute is set. I understand content disposition can be used to get file name but that is not set either
}
}

我想在锚点的下载属性上获取分配给文件的文件名。如何检索相同的文件名?我正在使用Android API 28进行测试。

我用URLUtil工作得很好,很容易

webView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
String filename = URLUtil.guessFileName(url, contentDisposition, mimetype);
Toast.makeText(MainActivity.this, filename, Toast.LENGTH_SHORT).show();
}
});

我遇到了同样的问题,我知道chrome有能力做到这一点。 Chrome 具有测试此 https://source.chromium.org/chromium/chromium/src/+/main:content/browser/download/download_browsertest.cc;drc=0b067632d4fd6e470cca27ceb2795e194337b30a;l=4239 的单元测试

Android上的Chrome在我们可以看到的下载过程中使用此值 https://source.chromium.org/search?q=GetTargetFilePath&sq=&ss=chromium%2Fchromium%2Fsrc:chrome%2Fbrowser%2Fdownload%2Fandroid%2F

例如,我们可以看到它使用此值打开已完成的下载 https://source.chromium.org/chromium/chromium/src/+/main:chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java;drc=f03f9c715ccd0bb898c58a06ab5f7f3ba435164c;l=482

我们还可以看到它在哪里创建下载信息。 https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/download/android/download_manager_service.cc;drc=0e2c54333690dadb1456f0fbe30356df0b90d745;l=166

我已经搜索了很多,在这个问题上没有成功,但这是我必须让它发挥作用的最佳线索。如果我发现我们是否可以在 web 视图中触发它,将会更新,但到目前为止我还没有发现其他人成功获得对象 url 名称。

我从这次搜索中得出结论,谷歌实际上并没有在chromium中使用onDownloadStart,而是在GetTargetFilePath存在的C++中处理它,以便为他们提供这些额外的信息。 onDownloadStart 早在创建 AOSP(android 开源项目(浏览器时就存在,而 chrome 是一个不同的平台,它只是将信息暴露给此方法但不使用它。因此,onDownloadStart 不包含建议的文件名可能是疏忽。

来源(Chrome 不使用此方法(:https://source.chromium.org/search?q=%20onDownloadStart%20language:java&ss=chromium%2Fchromium%2Fsrc&start=21

最新更新