当我们在页面中为该文件提供链接时,如何获取我们上传到服务器的文件名?
我正在做的是,我在 webview 中提供带有文件链接的数据,因此无论何时用户单击链接都需要从服务器下载,因为我已经从服务器下载了这个文件,但问题是无法获取其确切的类型和名称使用下载管理器。我想要这样
在上面看到我在 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/