0

我有一个主页,其中有一个下载目录。我想从它的目录中自动读取这个主页的所有文件。

例如,我有主页:以及包含我要显示的下载文件www.homepage.org的子目录。resources/downloads

我有一个运行 Spring 和 JSP 的 Java 服务器,并尝试了以下方法,但根本不起作用:

    String path = request.getContextPath();
    path += DOWNLOADS;
    URL url = null;
    String server = request.getServerName();
    try {
        url = new URL("https", server, request.getLocalPort(), path);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    if (url != null) {
        String externalForm = url.toExternalForm();
        File directory = new File(externalForm);
        String[] files = directory.list();
        for (String file : files) {
            ;
        }
    }
4

4 回答 4

1

您可以使用 Servlet。如果您的资源目录位于 Web 应用程序的根目录中,则使用

PrintWriter writer = response.getWriter();
String path = getServletContext().getRealPath("/resources/downloads");
File directory = new File(path);
if(directory.isDirectory()){
   String[] files = directory.list();
   for (String file : files) {
        writer.write(file + "<br/>");
   }
} else writer.write(directory.getAbsolutePath() + "could not be found");
于 2012-11-29T15:38:48.827 回答
0

HTTP 协议不提供在“目录”中列出“文件”的方法。实际上,从协议规范的角度来看,没有目录这样的东西。

  • 如果您尝试访问的网络服务器支持WebDAV,您可以使用 PROPFIND 找出集合(即目录)的结构。

  • 或者,如果网络服务器启用了目录列表(并且没有index.html或其他),那么您可以屏幕抓取列表 HTML。

  • 否则,没有真正的解决方案……使用 HTTP / HTTPS。


在重新阅读问题和答案时,我发现尝试检索目录列表的 servlet 和托管目录的 servlet实际上可能在同一台机器上运行。在这种情况下,您可以选择通过文件系统访问信息。但这需要“客户端”servlet 知道“服务器”servlet 如何表示事物。URL 不会(也不能)为您提供该信息。

rickz 提供的答案是一种可能的方法,尽管它仅在客户端和服务器 servlet 实际上是同一个 servlet 时才有效。

于 2012-11-29T15:10:38.697 回答
0

您需要使用目录的路径而不是 url 列出目录。检索文件后,您必须创建自己的 html 以将其放入您的网络(如果这是您想要的)。

这里有一个很好的例子来创建一个目录列表和使用 JQuery 浏览

下载部分的包中包含一个 JSP 连接器,如果您不想使用 JQuery 树,可能需要稍微调整一下。

祝你好运!

于 2012-11-29T15:14:01.567 回答
0

我找到了使用 FTP 管理器的解决方案...您可以在此处查看代码

我希望它能帮助您解决问题。

于 2012-11-29T14:58:52.053 回答