android - 如何在 webview 中单击 URL 时获取文件名

标签 android android-webview android-download-manager

当我们在页面中为该文件提供链接时,如何获取我们上传到服务器的文件名?

我正在做的是,我在 webview 中提供带有文件链接的数据,因此无论何时用户单击链接都需要从服务器下载,因为我已经从服务器下载了这个文件,但问题是无法获取其确切的类型和名称使用下载管理器。我想要这样

enter image description here

在上面看到我在 test_androt 中为我的文件提供了链接,当我单击它时将提供带有文件名选项的 dailog,我不知道当用户单击 WebView URL 链接时如何获得此文件名。

编辑 抱歉忘了说我的网址是这样的

misc/dnload.php?t1=MzQ0MDA=&t2=MTY5NTUz&t3=MTY5NTUzMTMwMjEyMDNfcGhhcm1hY3kga2V5IGluZm8ucG5n&t4=MTMwMjEyMDM=

最佳答案

感谢 Raghunandan 的建议,我得到了答案。

这里我需要额外调用来获取下载文件的头信息。在 header 部分,我得到了文件的名称。

我还发现了这个 Filename from URL not containing filename suffix通过该帖子,我获得了有关 header 详细信息的更多详细信息,我们可以在请求时获取这些信息。

因为我们可以使用此 URLUtil.guessFileName(url, null, null) 但这将为我的案例提供调用方式的文件名,我有这样的 url

misc/dnload.php?t1=MzQ0MDA=&t2=MTY5NTUz&t3=MTY5NTUzMTMwMjEyMDNfcGhhcm1hY3kga2V5IGluZm8ucG5n&t4=MTMwMjEyMDM=

所以从上面的链接中,这将提取 dnload.php 作为文件名,它不是我们下载的原始文件名,它只是为该文件创建了下载链接。

这是使用它的代码,我们可以获取文件名,它只是一个额外的调用来获取信息,但实际上我们下载了,为了下载,我使用了 android 内置的 api 到 DownloadManager 来下载文件。

Content-Disposition this is the attribute in header section through which we can get the file name as in attachment form.

它将以这种方式返回信息 Content-Disposition: attachment; filename="fname.ext" 所以现在只需要提取文件名

class GetFileInfo extends AsyncTask<String, Integer, String>
{
    protected String doInBackground(String... urls)
    {
                URL url;
                String filename = null;
                try {
                    url = new URL(urls[0]);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.connect();
                conn.setInstanceFollowRedirects(false); 

                String depo = conn.getHeaderField("Content-Disposition");
                String depoSplit[] = depo.split("filename=");
                filename = depoSplit[1].replace("filename=", "").replace("\"", "").trim();
                } catch (MalformedURLException e1) {
                    e1.printStackTrace();
                } catch (IOException e) {
                }
            return filename;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute();
        // use result as file name
    }
}

关于android - 如何在 webview 中单击 URL 时获取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15879119/

相关文章:

java - 什么是在java中解析数学表达式的好库?

页面重新加载时未调用 Android Webview onReceivedTitle

用于 EditText 的 Android 自动填充对深色/夜间模式不友好

android - 在 Activity 中隐藏图标和标签(启动画面)

java - 如何限制文件上传带宽?

android - 在 Android 中使用 Cordova 5.0 构建自定义 WebView

javascript - 使用 JavascriptInterface 时未捕获的类型错误

android - 使用暂停和恢复按钮下载文件?

Android:下载管理器和 COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED

android - 安装 .apk 文件时出现解析错误