检查Url是指文件还是目录.(HTTP)



如何确定url是否引用文件或目录?链接http://example.com/test.txt应该返回它是一个文件,http://example.com/dir/是一个目录

我知道你可以用Uri类做到这一点,但是这个对象的IsFile函数只适用于file:///方案。我正在使用http://格式。知道的吗?

谢谢

我不知道为什么这个问题这么长时间没有得到回答/被忽视。我在服务器端java中也遇到了同样的情况(估计Android的情况也差不多)。唯一的输入信息是资源的URL,我们需要判断该资源是目录还是文件。这就是我的解决方案。

if ("file".equals(resourceUrl.getProtocol())
    && new File(resourceUrl.toURI()).isDirectory()) {
    // it's a directory
}

希望这对下一个读者有所帮助。

注:请参见@awwsmm评论。这是我在提供上述答案时的假设。基本上,测试远程资源是否是目录或其他东西是没有意义的。对于每个请求返回什么完全由站点决定

无法工作,因为协议将是http://而不是file://。

 class TestURL{
   public static boolean isDirectory(URL resourceUrl){
     if ("file".equals(resourceUrl.getProtocol())
       && new File(resourceUrl.toURI()).isDirectory()) {
        true;
     }
     return false;
   }
   public static void main(String[] args){
     System.out.println(TestURL.isDirectory("http://example.com/mydir/"));
   }
 }

我认为目录http://example.com/some/dir会重定向到http://example.com/some/dir/,而文件不会。

即可以检查http Location字段在HEAD响应:

$ curl -I http://example.com/some/dir | grep Location
Location: http://example.com/some/dir/

在我的案例中,我需要使用HTTPS下载文件,并且有时服务器被错误配置为重定向请求,因此只下载http数据。

就我而言,我能够"决定"所请求的资源是否为文件正在检查"内容类型"。/又名MIME类型。

        String[] allowedMimeTypes = new String[] { "application/octet-stream", "image/gif",
            "text/css", "text/csv", "text/plain", "text/xml" };            
        URL website = new URL("https://localhost/public/" + file);
        HttpsURLConnection huc = (HttpsURLConnection) website
                .openConnection();
        if (!Arrays.asList(allowedMimeTypes).contains(huc.getContentType())) {
            throw new Exception("Not a file...");
        }

当响应包含text/html;charset=utf-8或类似的内容时,我能够确定它确实不是一个文件。

还要注意,这些MIME类型通常在服务器端是完全可配置的。

相关内容

  • 没有找到相关文章

最新更新