在哪里保存用户文件?

时间:2011-07-06 09:47:16

标签: java file-upload tomcat6

我在服务器端使用Tomcat 6.0.32开发了一个Web应用程序。

在客户端,用户可以发送文件(最大大小:10MB),我的Web应用程序应该在本地保存。 不应通过URL直接实现这些文件(例如:http://www.mywebapp.com/user/file1.png)。

我必须保存这些文件吗?我想在/ WEB-INF / user_folder /或其他位置?

3 个答案:

答案 0 :(得分:3)

理论上,您可以将文件放在任何地方:

  • 在$ CATALINA_HOME / webapp / WEB-INF /...
  • 在$ CATALINA_HOME / webapp /...
  • 在$ CATALINA_HOME / temp /...
  • 位于$ CATALINA_HOME
  • 的自定义子目录中
  • 本地文件系统中的其他位置
  • 在网络共享
  • 在数据库中
  • 在埋在花园底部的石碑上。

在实践中,由您决定哪个最容易管理。例如:

  • 如果您将文件放在webapp目录中,则重新部署Web应用程序可能会丢失文件。
  • 如果您将文件放在$ CATALINA_HOME树之外并运行启用了Java安全性的Tomcat,则可能会阻止您的webapp读取/写入文件。 (这实际上可能是一件好事!)
  • 您需要确保请求无法在意外的位置读取/写入文件。例如,您需要防止使用“../../ ....”的请求中断并访问主机操作系统中的文件;例如“../../../../ etc / passwd的”。
  • 您需要考虑文件备份和文件空间管理问题。
  • (石碑提出了一些有趣的挑战......)

答案 1 :(得分:0)

您可以使用apache文件上传库和apache commons io。出于安全考虑,最好将文件保存在其他位置。例如,在硬盘中的某个位置并将位置存储在数据库中。有人可以下载您的文件如果你的文件保存在你的网络文件夹中你的网址。 然后,您可以创建一个servlet来打开文件并将其发送给客户端。

Apache commons file upload

答案 2 :(得分:0)

将您的上传保存在网络信息(WEB-INF)目录下肯定会将文件隐藏起来远离用户,但在实践中,几乎没有人这样做。下次对WAR进行新修订时,可能会丢失在该文件夹中保存的所有内容。

您应该通过在web.xml中配置或者使用各种MVC框架(如Struts,struts.xml来控制URL和上下文(例如mywebapp.com/user/*)。 / p>

您可能需要提前考虑并将这些用户上传的文件保存在服务器的其他位置,例如/apps/myproject/user-uploads