从URL检查内容类型

Ang*_*i H 1 java url content-type httpurlconnection

之前我问过这个问题,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();
Run Code Online (Sandbox Code Playgroud)

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

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

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

所以我的问题:

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

谢谢你的帮助.

far*_*dgn 5

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

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

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