在实时服务器中重新部署WAR时,如何避免删除目录中的上传文件?

时间:2015-01-10 06:31:10

标签: java spring-mvc file-upload maven-3

我目前正在开发Spring MVC Web应用程序。我被告知要将SQl中的图像保存为blob,但根据我的理解,图像的数量会随着时间的推移而变大,这会因为大尺寸而减慢每个线程的处理时间。我想将文件存储在

String uploadDir = request.getSession().getServletContext().getRealPath("/resources")+"/" +user.getTenantId()+ "/" +user.getUsername()+ "/";

我知道在重新部署war文件时会导致删除这些文件。我搜索了很多次,发现配置到整个应用程序之外的文件夹是件好事。这在本地计算机中不是问题。考虑当我为实时服务器实现它时,我如何在服务器中指定外部文件夹..?如果我这样配置,它也会安全吗?

2 个答案:

答案 0 :(得分:2)

  

我知道在重新部署war文件时会导致删除这些文件。

好吧不要把文件放在那里!重新部署时没有可靠的方法来阻止文件被删除。

显而易见的解决方案是将文件放在其他位置。创建一个Web服务器可以写入的目录,并将上传的文件放在那里。

  

考虑当我为实时服务器实现它时,我如何在服务器中指定外部文件夹?

使用某种配置文件。

  

如果我这样配置,它也会安全吗?

这取决于。例如,它取决于

  • 您放置目录的位置(如果您填写文件系统),
  • 是否在目录上正确设置权限
  • 您是否使用受限帐户运行网络服务器,
  • 是否要防范用户请求中“棘手”的路径名;例如嵌入了“../”的内容,可用于从上传目录中“转义”并读取或写入用户不应访问的文件。

但即使您将上传内容放置在已部署的webapp目录中,也需要注意其中的大部分内容。

答案 1 :(得分:0)

在配置中定义uploadem路径soemwhere(例如,创建config.properties文件),在任何本地或生产环境中部署时,更改设置以反映文件目录的正确路径。

如果您需要将一个用户的文件与其他用户隔离,那么将文件放在资源目录中是不安全的。猜猜整个应用程序可以访问资源目录,因此任何用户都可以获取其他用户的al文件。这是将目录保留在Web应用程序目录之外的第二个原因。