2011-07-06 80 views
0

我已经开发了一个在服务器端使用Tomcat 6.0.32的Web应用程序。哪里可以保存用户文件?

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

我在哪里保存这些文件?我想在/ WEB-INF/user_folder /中还有其他位置?

回答

3

从理论上说,你可以把这些文件的任何地方:

    在$ CATALINA_HOME/web应用/ WEB-INF
  • /...
  • 在$ CATALINA_HOME/webapp的
  • /...
  • 在$ CATALINA_HOME/TEMP
  • /...
  • 在$ CATALINA_HOME
  • 别的地方组委会定制的子目录在网络共享
  • 人的文件系统
  • 在埋在花园的底部石碑数据库

实际上,由您来决定哪一个最容易管理。例如:

  • 如果将这些文件放在webapp目录中,那么存在重新部署webapp会导致文件被删除的风险。
  • 如果您将文件放在$ CATALINA_HOME树之外,并且启用了Java安全性的Tomcat,则可能会阻止您的webapp读取/写入文件。 (这实际上可能是一件好事!)
  • 您需要确保请求无法在意外的地方读/写文件。例如,您需要防止使用“../../....”打开并访问主机操作系统中的文件的请求;例如“../../../../etc/passwd”。
  • 您需要考虑文件备份和文件空间管理问题。
  • (碑林目前一些有趣的挑战......)
+0

+1文件安全性,备份和空间管理问题。 –

+0

我认为石碑是最好的地方。 – Alvin

+0

LOLLLL :)我用过石头片。 – CeccoCQ

0

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

Apache commons file upload

0

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

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

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