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

前端之家收集整理的这篇文章主要介绍了android – 如何在webview中单击URL时获取文件名前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我们在页面中为该文件提供链接时,如何获取我们在服务器上传文件名?

我正在做的是,我在webview中提供带有文件链接的数据,所以每当用户点击链接需要从服务器下载时,因为我已从服务器下载此文件,但问题是无法使用DownloadManager获取其确切的类型和名称.我想这样

在上面看到我在test_androt中给出了我的文件链接,当我点击它时会给dailog带有文件名的选项,当用户点击WebView URL链接时我不知道如何实现这个文件名.

编辑
很抱歉忘记提及我的网址是这样的

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

解决方法

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

在这里,我需要额外的调用获取下载文件标题信息.在标题部分,我得到了文件名称.

此外,我发现了这篇Filename from URL not containing filename suffix帖子,通过该帖子我得到了关于标题细节的更多细节,我们可以在请求时间获得.

因为我们可以使用这个URLUtil.guessFileName(url,null,null),但这将给出我的案例的调用方法文件名我有这样的url

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

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

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

  1. 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”所以现在只需要提取文件

  1. class GetFileInfo extends AsyncTask<String,Integer,String>
  2. {
  3. protected String doInBackground(String... urls)
  4. {
  5. URL url;
  6. String filename = null;
  7. try {
  8. url = new URL(urls[0]);
  9. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  10. conn.connect();
  11. conn.setInstanceFollowRedirects(false);
  12.  
  13. String depo = conn.getHeaderField("Content-Disposition");
  14. String depoSplit[] = depo.split("filename=");
  15. filename = depoSplit[1].replace("filename=","").replace("\"","").trim();
  16. } catch (MalformedURLException e1) {
  17. e1.printStackTrace();
  18. } catch (IOException e) {
  19. }
  20. return filename;
  21. }
  22.  
  23. @Override
  24. protected void onPreExecute() {
  25. super.onPreExecute();
  26. }
  27. @Override
  28. protected void onPostExecute(String result) {
  29. super.onPostExecute();
  30. // use result as file name
  31. }
  32. }

猜你在找的Android相关文章