【问题标题】:how to find out if the url http://www.test.com/abc.pdf is a file or a directory?如何确定 url http://www.test.com/abc.pdf 是文件还是目录?
【发布时间】:2011-03-24 00:48:38
【问题描述】:

我想在 java 中编写一些代码来确定给定的 url 是文件还是目录。我该怎么做??

【问题讨论】:

    标签: java file url directory


    【解决方案1】:

    URL 本身没有“文件”或“目录”的概念。 URL 的内容由服务器在请求时响应的任何内容定义。如果您获得 MIME 类型为 application/pdf 的内容,则 URL 表示 PDF 文件。如果你得到其他任何东西,那么它不是 PDF 文件。

    【讨论】:

    • Apache 将静态目录作为 text/html 提供,所以这也无济于事。
    • 所以我必须发出一个httprequest,得到一个响应并在响应的标题中寻找mime-type?如果我对 pdf 进行 httprequest 是否与下载文件一样?
    • @Yannick Wald:是的,您必须询问服务器。但是,您可以执行 HEAD 请求来仅检索 HTTP 标头,而无需下载整个文件(下载文件将是 GET 请求)。
    【解决方案2】:

    在任何 URL / URI 规范、HTTP 规范或 MIME 类型注册表中都没有“目录”的概念。

    因此,网络服务器无法告诉客户端 URL 解析为目录......即使它知道这意味着什么。 (在许多情况下,网络服务器并不知道/关心目录本身;例如,典型的 RESTful Web API 无法识别这个概念。)

    您的选择是:

    • 尝试获取内容并查看您获得的内容类型。但请记住,网络服务器可能会将“目录”呈现为任何内容......因此(通常)不可能以这种方式可靠地区分目录和非目录。

      如果您想避免下载文件,可以发送 HEAD 请求而不是 GET 请求。这需要使用成熟的 HTTP 客户端库而不是 URLConnection

    • 更改您的应用程序设计和实现,以便不需要“目录”概念。

    • 更改您的应用程序,以便 完全根据 URL 决定什么是“目录”和什么是“文件”。 (在一般情况下,这是行不通的......因为没有普遍遵守的 URL 名称部分约定可以让您进行区分。)

    • 更改为使用 URL 方案/协议,其中“目录”是一个明确定义的概念。例如“文件:”或“ftp:”。

    【讨论】:

      【解决方案3】:

      从 URL 返回的内容本质上不是“文件”或“目录”。充其量,它是具有内容类型的数据流。它通常成为客户端的“文件”,通过将其保存到文件系统或仅用于显示的临时存储。基本上,Web 服务器无法使用 HTTP 告诉客户端某个目录是目录。

      您要么必须创建一些客户端业务逻辑来推断“目录”(可能基于 URL,也许缺少文件扩展名?),要么为此使用不同的协议。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-02
        • 2012-05-30
        • 1970-01-01
        • 1970-01-01
        • 2019-02-22
        • 2018-09-11
        • 1970-01-01
        相关资源
        最近更新 更多