我有适用于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下提供所有文件?安全吗?它是唯一的解决方案吗?
答案 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(),您还可以添加过滤器,以便隐藏您不希望用户访问的文件。