Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在从URL检查内容类型_Java_Url_Httpurlconnection_Content Type - Fatal编程技术网

Java 正在从URL检查内容类型

Java 正在从URL检查内容类型,java,url,httpurlconnection,content-type,Java,Url,Httpurlconnection,Content Type,我以前问过这个问题,然后回答了。虽然只为直接链接工作,但我接受了他的回答。他刚刚告诉我检查direct link的内容类型: 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.getCon

我以前问过这个问题,然后回答了。虽然只为直接链接工作,但我接受了他的回答。他刚刚告诉我检查direct link的内容类型:

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
类型可以下载文件:

  • 直接链接。例如:。从这个链接中,我们可以直接下载数据并获得文件名,包括文件扩展名(在这个链接中,
    .zip
    扩展名)。这样我们就可以知道要下载什么文件了。您可以尝试从该链接下载
  • 无向链接。例如:。你有没有试过从谷歌硬盘下载数据?当从谷歌硬盘下载数据时,它会给你一个非直接链接,比如上面的链接。我们永远不知道链接是否包含文件或网页。此外,我们不知道文件名和文件扩展名是什么,因为这种链接类型是不清楚和随机的
我需要检查它是文件还是网页。如果内容类型是文件,我必须下载它

因此,我的问题是:

  • 如何从无向链接检查内容类型
  • 如本问题的注释所示,HTTP重定向能否解决问题

感谢您的帮助。

此类链接将浏览器重定向到使用的实际内容。要获得正确的内容类型,只需通过将
setFollowRedirects()
设置为true(documented),告诉
HttpURLConnection
遵循重定向即可。

打开URLConnection后,将返回头文件。里面有一些关于这个文件的信息。你可以从那里得到你想要的。例如:

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

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

MimeTypeMap.getFileExtensionFromUrl(url)

可能的解决方案:使用非直接链接意味着什么?HTTP重定向?您是否对此问题进行了适当的修复?@MiteshSharma,我仍然没有找到解决方案@farukdgn的答案使用与返回
内容类型
标题字段以获取内容类型相同的方法。@MiteshSharma,farukdgn的答案有效。查看他答案上的注释以了解其工作原理。从
URLConnection
class,
getHeaderField()
方法返回
Content-Type
标题字段。此方法返回与
getContentType()
相同的标题字段。对不起,我不能接受这个答案。那么呢?我不知道问题出在哪里,因为它们都很好用。你遇到过哪些问题?现在它起作用了。我已连接到服务器两次,并为我的IP地址提供了大约一个小时的间隔时间。当我在一小时后第三次连接到它时,服务器返回内容类型为.htm。因此,当我尝试在一小时后用相同的IP重新连接时,问题就出现了。谢谢你的帮助!医生说默认情况下这是
正确的
,所以我想你不必这么做?