我在其中服务通过HTTP目录树中的一些文件。 鉴于一些子目录中,该目录树中我希望能够下载目录中的所有包含子目录和文件。
这很可能是一个简单/直接/原子的解决方案在Java中的一些阴暗的角落存在。 有谁知道如何做到这一点?
一个WebCrawler的不会解决我的问题,因为在子目录中的文件可以链接到不子目录的目录。
== ==更新
目录和文件必须在静态的方式举行。
服务器托管静态文件的目录树中,客户端运行的Java,并试图复制使用HTTP目录树的一些分支。
VFS是这个问题的答案,可惜我回答了这个问题我自己,所以不能从现在开始选择它作为回答,直到两天。 如果有人会写我的答案我会很乐意为纪念他们写了作为答案。
==进一步更新==
VFS其实不是答案。 VFS不会列出目录通过HTTP, 这里说 。 那里似乎是那几个人感兴趣的是功能。
假设你已经在服务器和客户端的控制,我会写一个页面(在你最喜欢您所选择的技术,ASP,JSP,PHP等),读取服务器的目录结构,并动态返回一个由一堆页面链接到每个文件被下载。
然后客户端就可以触发一个下载的每一个环节。
什么是客户端技术? 是的东西做下载某种类型的应用程序或Web浏览器? 它必须有一个客户端接口?
如果这是某种形式的内部实用程序,也许你可以只的FTP呢? 拥有开放FTP访问的服务器上,并下载目录很容易...
添加另一种可能的答案:
如果服务器没有目录列表打开,那么你基本上要作出修改服务器端。 最简单的事情将是只是使返回已知格式的目录结构到客户端(见我上面的第一个答案)的页面。
如果你控制的服务器,并且对目录列表, 而你总是使用同一个服务器程序(IIS,Tomcat的,JBoss的,等等),那么你也许可以只是让客户webcrawl目录列表。 例如,在从IIS目录列表,你可以知道哪些环节是目录和文件,是因为它总是把一个“/”在一个目录的链接结束,并显示“目录”,而不是一个文件大小:
Friday, October 16, 2009 03:55 PM <dir> <A href="Unity/">Unity</A>
Thursday, July 02, 2009 10:42 AM 95 <A href="Global.asax">Global.asax</A>
你可以在这里告诉大家,第一个链接是一个目录,第二个是一个实际的文件。
所以,如果你使用的是一致的服务器应用程序,只是来看看如何返回目录列表。 也许你会得到幸运。
我的第一个建议是建立一个servlet / JSP这recursiveley读取目录结构(使用的java.io.File),读取所有文件,并将它们放在一个压缩(java.util.zip),并将其发送到的browers为下载。
我不知道原子的解决方案,但最直接的人会使用一个URLConnection再次取分目录(假设服务器列出目录),然后解析响应,查找目录的内容,并使用的URLConnection获取每个文件的下它。
基于这些问题的答案,现在我想知道如果你的意思是Java成为在客户端或服务器端!
所以,如果你在获取所有文件和directores的列表服务器端的特定URL,就好像它是本地磁盘文件系统文件夹的客户端想要什么? 这通常是不可能的,当服务器没有启用目录索引。 即使如此,你仍然需要解析它代表目录索引HTML页面和解析所有<a>
代表的文件和文件夹自己的元素。 有没有正常java.io.File
这种方法。 这将是一个巨大的安全漏洞。 一会,例如可以从下载所有的源文件http://gmail.com 。 HTTP不意味着作为文件传输协议。 使用FTP。 这就是它代表。
如果我没有弄错要命,HTTP不会告诉你的服务器端的“结构”什么 - 如果这样的事情甚至存在。
想想REST在URI并没有真正告诉你在哪里可以找到服务器上的文件,但也仅仅是引发一些行动,检索数据等。
所以,我不认为你正在努力实现能够可靠地做什么,与Java或任何其他语言吧。 或者,也许我收到你错在这里?
谈论唾手可得;-)谢谢你的帮助,E5!
共享VFS提供用于访问各种不同的文件系统的单个API。 它提出的文件从各种不同的来源,诸如在本地磁盘中的文件的统一视图,在HTTP服务器上,或一个Zip文件内。
http://commons.apache.org/vfs/
这是第一次在一段时间谷歌击败计算器,阿帕奇公地VFS不正是我需要的。
共享VFS提供用于访问各种不同的文件系统的单个API。 它提出的文件从各种不同的来源,诸如在本地磁盘中的文件的统一视图,在HTTP服务器上,或一个Zip文件内。
http://commons.apache.org/vfs/
== ==更新
如问题陈述VFS只假装要解决这个问题,因为它不允许的HTTP目录的上市。