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

How to avoid deletion of Uploaded files in directory when redeploying the WAR in realtime Server?

我目前正在开发 Spring MVC 网络应用程序。有人告诉我将 SQl 中的图像保存为 blob,但根据我的理解,图像的数量会随着时间的推移而增加,这会由于尺寸过大而减慢每个线程的处理时间。我想将文件存储在

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

我知道这会导致在重新部署 war 文件时删除这些文件。找了很多次,发现配置到整个应用程序之外的一个文件夹就好了。这在本地机器上不是问题。考虑一下当我为实时服务器实现它时,我怎么能在服务器中指定一个外部文件夹..?还有我这样配置安全吗..?

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

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

I know this will lead to deletion of those files when redeploying the war file.

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

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

Consider when I'm implememnting it for realtime servers, how could I specify an outside folder in server?

使用某种配置文件。

Also will it be secure if I configure like this way?

这取决于。比如依赖

  • 放置目录的位置(以防填满文件系统),
  • 是否正确设置目录权限,
  • 您是否为 运行 网络服务器使用受限帐户,以及
  • 是否防范 "tricky" 用户请求中的路径名;例如带有嵌入式“../”的那些可以用来从上传目录"escape"读取或写入用户不应该访问的文件。

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