从URL检查内容类型

时间:2015-01-26 06:25:27

标签: java url httpurlconnection content-type

之前我问过这个question并且Evgeniy Dorofeev回答了它。虽然只为直接链接工作,但我接受了他的回答。他刚刚告诉我关于从直接链接检查内容类型的信息:

String requestUrl = "https://dl-ssl.google.com/android/repository/android-14_r04.zip";
URL url = new URL(requestUrl);
URLConnection c = url.openConnection();
String contentType = c.getContentType();

据我所知,有两种URL类型可以下载文件:

  • 直接链接。例如:https://dl-ssl.google.com/android/repository/android-14_r04.zip。通过此链接,我们可以直接下载数据并获取文件名,包含在文件扩展名中(在此链接中,.zip扩展名)。所以我们可以知道要下载的文件。您可以尝试从该链接下载。
  • 非直接链接。例如:http://www.example.com/directory/download?file=52378。您是否曾尝试从Google云端硬盘下载数据?从Google云端硬盘下载数据时,它会为您提供非直接链接,例如上面的链接。我们永远不知道链接是否包含文件或网页。此外,我们不知道文件名和文件扩展名,因为此链接类型不清楚且随机。

我需要检查它是文件还是网页。如果内容类型是文件,我必须下载它。

所以我的问题:

  • 如何从非直接链接检查内容类型?
  • 如此问题的评论所示,HTTP重定向可以解决问题吗?

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

打开URLConnection后,将返回头文件。有一些关于该文件的信息。你可以从那里拉出你想要的东西。例如:

URLConnection u = url.openConnection();
long length = Long.parseLong(u.getHeaderField("Content-Length"));
String type = u.getHeaderField("Content-Type");

length是文件的大小(以字节为单位),type类似application/x-dosexecapplication/x-rar

答案 1 :(得分:1)

此类链接使用HTTP redirects将浏览器重定向到实际内容。要获得正确的内容类型,您只需通过将HttpURLConnection设置为true(记录为here)告诉setFollowRedirects()关注重定向。

答案 2 :(得分:0)

MimeTypeMap.getFileExtensionFromUrl(URL)