最佳文件上传位置

7

我正在处理一些需要先上传文件到服务器某个位置,然后再从该位置获取文件并导入系统的重要过程。

我在思考最佳存储上传文件的地方,有以下几个选项:

1)可以在Tomcat根目录下创建一个文件夹,将上传文件放置在那里,然后稍后再从该位置获取文件进行导入处理。

File dir = new File(System.getProperty("catalina.base"), "uploads");

这是一个好的选择,上述代码是否在所有环境中都能正常工作?

2)我可以在我的应用程序下创建一个uploads文件夹,并使用以下代码访问它进行文件上传,以后还可以用于导入。

ServletActionContext.getServletContext().getRealPath("uploads");

需要您宝贵的建议,我需要做的唯一工作是上传文件,然后运行导入已上传文件的过程,一旦导入成功,将文件从此文件夹中移除到其他文件夹,如已处理等。

1个回答

10
File dir = new File(System.getProperty("catalina.base"), "uploads");
它在没有catalina.base属性的环境中无法工作。因此,您需要在Web应用程序的安装手册中正确记录它,以确保该属性已设置在相关的服务器机器上,或者寻找替代方法。
ServletActionContext.getServletContext().getRealPath("uploads");
这不是作为永久存储的好选择,因为每次重新部署WAR时都会丢失所有内容。最好将其存储在已知的固定路径之外的位置,并将其路径作为Tomcat的`/conf/server.xml`中的添加,这样它就可以在线上使用了。
如果出于某种原因不想更改Tomcat的`/conf/server.xml`,则需要创建一个Servlet,使用`FileInputStream`从磁盘读取文件并将其写入响应的`OutputStream`中。您可以在此处找到一个基本示例:http://balusc.blogspot.com/2007/07/fileservlet.html
相关问题:

@BalucS 如果我按照您建议的方式将上下文放在server.xml文件中,我该如何在我的Java应用程序中访问该路径?因为最终我需要使用Java IO访问此文件,以便将其传递给系统的其他部分。 - Umesh Awasthi
你可以在代码中硬编码完整路径,也可以在web.xml中配置完整路径并从servletcontext获取它,还可以硬编码/配置部分路径“uploads”并使用getRealPath()来揭示它,等等。 - BalusC
@BalusC 这适用于Tomcat服务器。如果我想在Glassfish3服务器上实现它,我需要做哪些更改? - Wizard Sultan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接