代码之家  ›  专栏  ›  技术社区  ›  Ethan Heilman

在Java中通过HTTP下载目录

  •  1
  • Ethan Heilman  · 技术社区  · 16 年前

    我在一个目录树中有一些文件,通过HTTP提供服务。 给定某个子目录A,在该目录树中,我希望能够下载目录A以及所有包含子目录和文件的目录。

    在Java的某个黑暗角落似乎存在一个简单的/直接的/原子的解决方案。有人知道怎么做吗?

    webcrawler无法解决我的问题,因为子目录中的文件可能链接到非子目录的目录。

    ==更新==

    目录和文件必须以静态方式托管。

    服务器静态地托管目录树中的文件,客户端运行Java并试图使用HTTP复制目录树的某个分支。

    VFS

    ==进一步更新==

    事实上,这不是答案。VFS不会通过HTTP列出目录, as stated here . 似乎确实有一些人对该功能感兴趣。

    7 回复  |  直到 16 年前
        1
  •  6
  •   Bozho    16 年前

    我的第一个建议是创建一个servlet/jsp,它递归地读取目录结构(使用java.io.File),读取所有文件,将它们放在一个zip(java.util.zip)中,然后发送给浏览器下载。

        2
  •  2
  •   Murali VP    16 年前

        3
  •  2
  •   BalusC    16 年前

    <a> 表示文件和文件夹的元素。没有正常的 java.io.File 这方面的做法。那将是一场灾难 巨大的 安全漏洞。例如,可以从下载所有源文件 http://gmail.com . HTTP并不意味着它是一个 文件 传输协议。使用FTP。这就是它的意思。

        4
  •  1
  •   Daniel Schneller    16 年前

    想想REST,URI并没有真正告诉您在服务器上的何处查找文件,而只是触发一些操作、检索数据等。

    因此,我不认为您试图实现的目标是可靠的,无论是使用Java还是任何其他语言。或者我把你搞错了?

        5
  •  1
  •   Benjamin Cox    16 年前

    Commons VFS为访问各种不同的文件系统提供了一个API。它提供了来自各种不同来源的文件的统一视图,例如本地磁盘上、HTTP服务器上或Zip存档中的文件。

    http://commons.apache.org/vfs/

        6
  •  1
  •   Ethan Heilman    16 年前

    访问各种不同的文件 系统。它提供了一个统一的视图 来自不同国家的文件 源,例如本地服务器上的文件 压缩档案。

    http://commons.apache.org/vfs/

    ==更新==

    正如问题中所述,VFS只是假装解决了这个问题,因为它不允许列出http目录。

        7
  •  1
  •   CodingWithSpike    16 年前

    假设您可以控制服务器和客户端,我将编写一个页面(使用您喜欢的技术;ASP、JSP、PHP等)来读取服务器目录结构,并动态返回一个页面,该页面包含指向要下载的每个文件的一组链接。

    然后客户端可以触发每个链接的下载。

    什么是客户端技术?下载的是某种应用程序还是web浏览器?它必须有一个客户端接口吗?


    如果这是某种内部实用程序,也许你可以改为FTP?在服务器上打开FTP访问并下载目录将很容易。。。


    添加另一个可能的答案:

    如果服务器没有打开目录列表,那么您基本上必须在服务器端进行修改。最简单的方法是创建一个页面,以一种已知的格式将dir结构返回给客户机(参见上面我的第一个答案)。

    和 您总是使用同一个服务器程序(IIS、Tomcat、JBoss等),那么您可能只需要让客户机WebCraw目录列表即可。例如,在IIS的目录列表中,您可以分辨哪些链接是目录,哪些是文件,因为它总是在目录链接的末尾放一个“/”,并显示“dir”而不是文件大小:

     Friday, October 16, 2009 03:55 PM        &lt;dir&gt; <A href="Unity/">Unity</A>
     Thursday, July 02, 2009 10:42 AM           95 <A href="Global.asax">Global.asax</A>
    

    因此,如果您使用的是一致的服务器应用程序,只需看看目录列表是如何返回的。也许你会幸运的。