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