从AngularJS应用程序访问HDD上的文件

时间:2016-11-20 10:18:41

标签: javascript java angularjs tomcat architecture

我有适用于Tomcat 8.0.x的AngularJS(1.2.16)应用程序我需要添加以下功能:在应用程序中创建一个新选项卡(没问题),并允许用户从先前实现的选择框中选择具体新标签,来自HDD的文件(目录是在Tomcat外面给出的)和预览(PDF文件)。如何连接这两个世界?我也有后端。

我发现了非常相似的问题 - Simplest way to serve static data from outside the application server in a Java web application但我不明白如何从UI获取来自给定目录的文件列表。有什么最佳实践吗?

编辑:我发现也有可能重复,所以你建议在URL下提供所有文件?安全吗?它是唯一的解决方案吗?

1 个答案:

答案 0 :(得分:1)

安全注意事项

从应用程序服务器提供对文件系统文件夹的读/写访问始终是一种不好的做法。

应该考虑是否可以从互联网访问网络应用程序。

如果我们需要处理这种情况,最好的想法是了解我们需要具有哪些信息并进行修改,并将这些信息包含在允许的特定 API 中严格按照我们的需要开展工作。

或者我们可以采用一种操作方法,包括强化服务器和应该以任何威胁被包含的方式访问的文件夹。

解决方案部分

这个答案是建议复制的:Simplest way to serve static data from outside the application server in a Java web application

但这部分只是解释了所要求的解决方案。

这里的答案解释了如何从 Tomcat 中的自定义文件夹配置默认servlet的扩展:

您必须对 conf / server.xml

采取行动
<Context docBase="/path/to/files" path="/files" />

您可以在此处以 Tomcat 将访问的方式配置文件夹,并将其连接到可在HTTP请求上请求的路径 {{ 3}} 的)。

现在您需要配置 web.xml 以将特定的servlet连接到此路径,以便能够处理文件夹内容。

一旦您的servlet和 Tomcat 正确配置,就可以访问该文件夹和文件了。

这可以按照答案http://mytomcatserver/files/中的解释来完成。

简而言之,您可以使用普通java:

冷访问该文件夹
File filesFolder = new File(req.getSession().getServletContext().getRealPath("/files"));

然后使用方法 File.listFiles(),您可以获取文件夹中的文件列表。

使用 File.listFiles(),您还可以添加过滤器,以便隐藏您不希望用户访问的文件。