下载目录在Java中的HTTP(Download a directory over HTTP in

2019-10-18 06:45发布

我在其中服务通过HTTP目录树中的一些文件。 鉴于一些子目录中,该目录树中我希望能够下载目录中的所有包含子目录和文件。

这很可能是一个简单/直接/原子的解决方案在Java中的一些阴暗的角落存在。 有谁知道如何做到这一点?

一个WebCrawler的不会解决我的问题,因为在子目录中的文件可以链接到不子目录的目录。

== ==更新

目录和文件必须在静态的方式举行。

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

VFS是这个问题的答案,可惜我回答了这个问题我自己,所以不能从现在开始选择它作为回答,直到两天。 如果有人会写我的答案我会很乐意为纪念他们写了作为答案。

==进一步更新==

VFS其实不是答案。 VFS不会列出目录通过HTTP, 这里说 。 那里似乎是那几个人感兴趣的是功能。

Answer 1:

假设你已经在服务器和客户端的控制,我会写一个页面(在你最喜欢您所选择的技术,ASP,JSP,PHP等),读取服务器的目录结构,并动态返回一个由一堆页面链接到每个文件被下载。

然后客户端就可以触发一个下载的每一个环节。

什么是客户端技术? 是的东西做下载某种类型的应用程序或Web浏览器? 它必须有一个客户端接口?


如果这是某种形式的内部实用程序,也许你可以只的FTP呢? 拥有开放FTP访问的服务器上,并下载目录很容易...


添加另一种可能的答案:

如果服务器没有目录列表打开,那么你基本上要作出修改服务器端。 最简单的事情将是只是使返回已知格式的目录结构到客户端(见我上面的第一个答案)的页面。

如果你控制的服务器,并且对目录列表, 你总是使用同一个服务器程序(IIS,Tomcat的,JBoss的,等等),那么你也许可以只是让客户webcrawl目录列表。 例如,在从IIS目录列表,你可以知道哪些环节是目录和文件,是因为它总是把一个“/”在一个目录的链接结束,并显示“目录”,而不是一个文件大小:

 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>

你可以在这里告诉大家,第一个链接是一个目录,第二个是一个实际的文件。

所以,如果你使用的是一致的服务器应用程序,只是来看看如何返回目录列表。 也许你会得到幸运。



Answer 2:

我的第一个建议是建立一个servlet / JSP这recursiveley读取目录结构(使用的java.io.File),读取所有文件,并将它们放在一个压缩(java.util.zip),并将其发送到的browers为下载。



Answer 3:

我不知道原子的解决方案,但最直接的人会使用一个URLConnection再次取分目录(假设服务器列出目录),然后解析响应,查找目录的内容,并使用的URLConnection获取每个文件的下它。

基于这些问题的答案,现在我想知道如果你的意思是Java成为在客户端或服务器端!



Answer 4:

所以,如果你在获取所有文件和directores的列表服务器端的特定URL,就好像它是本地磁盘文件系统文件夹的客户端想要什么? 这通常是不可能的,当服务器没有启用目录索引。 即使如此,你仍然需要解析它代表目录索引HTML页面和解析所有<a>代表的文件和文件夹自己的元素。 有没有正常java.io.File这种方法。 这将是一个巨大的安全漏洞。 一会,例如可以从下载所有的源文件http://gmail.com 。 HTTP不意味着作为文件传输协议。 使用FTP。 这就是它代表。



Answer 5:

如果我没有弄错要命,HTTP不会告诉你的服务器端的“结构”什么 - 如果这样的事情甚至存在。

想想REST在URI并没有真正告诉你在哪里可以找到服务器上的文件,但也仅仅是引发一些行动,检索数据等。

所以,我不认为你正在努力实现能够可靠地做什么,与Java或任何其他语言吧。 或者,也许我收到你错在这里?



Answer 6:

谈论唾手可得;-)谢谢你的帮助,E5!

共享VFS提供用于访问各种不同的文件系统的单个API。 它提出的文件从各种不同的来源,诸如在本地磁盘中的文件的统一视图,在HTTP服务器上,或一个Zip文件内。

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



Answer 7:

这是第一次在一段时间谷歌击败计算器,阿帕奇公地VFS不正是我需要的。

共享VFS提供用于访问各种不同的文件系统的单个API。 它提出的文件从各种不同的来源,诸如在本地磁盘中的文件的统一视图,在HTTP服务器上,或一个Zip文件内。

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

== ==更新

如问题陈述VFS只假装要解决这个问题,因为它不允许的HTTP目录的上市。



文章来源: Download a directory over HTTP in Java