在Spring网络应用程序中保存上传文件的理想位置

时间:2018-01-21 10:13:43

标签: spring file-upload web-applications upload

我正在制作一个Spring网络应用,我希望我的用户能够上传一些图像,以便它们可以显示在索引页面上。什么文件夹最好保存图像?

我的应用具有以下结构:

MyAppRoot
|-src
  |-main
    |-java
      |-com
        |-myapp
          |-package
            |-<Java classes>
    |-resources
      |-static
        |-<html pages, js controllers and services...>
      |-templates

编辑: 目前,我对保存位置没有任何偏好。它可能位于项目文件夹中,位于磁盘上的其他位置(这意味着当我部署应用程序时它将是服务器的磁盘),作为我的数据库中的blob(我使用MySQL) ,在某些第三方文件共享服务或某些其他位置。所以,如果你能给我一些优点和帮助缺点,那将是伟大的。

1 个答案:

答案 0 :(得分:1)

存储文件的方式取决于目标部署环境。

部署在裸机上的应用程序

在这种情况下,您可以将文件直接存储在硬盘上。需要考虑的是路径和权限。我会把目录放在配置中。然后在部署期间,您需要确保您的应用程序具有对该文件夹的读写权限,并且该文件夹存在。根据您要存储的文件数量,考虑子文件夹,唯一命名等可能很重要。

该解决方案的缺点是,将应用程序迁移到云计算很可能需要更改,因为云解决方案通常不允许永久存储磁盘上的文件。

当然,如果您在裸机上部署应用程序,您仍然可以使用云服务来存储图像。

在云中部署的应用程序

根据云提供商的不同,您可能会有两种选择。

将文件存储在专用文件存储

您可以将文件存储在专用存储中,例如@maneesh提到的Amazon S3,Google App Engine上的blobstore等。该解决方案的优点是这些服务通常提供备份,访问控制,允许您从以下位置访问文件很多应用。需要考虑的一件事是定价。

将文件存储在数据库

此选项就是您在问题中提到的选项。您可以将文件存储为MySQL中的blob,如果使用Mongo等,则可以使用GridFS。实现它应该相当容易,并且与专用文件存储解决方案相比,它不需要处理额外服务 - 您已经拥有数据库。另外需要考虑的是定价 - 专用文件存储可能比数据库的额外存储更便宜。

专用图片服务

您还可以使用Cloudinary等专用图片服务。在存储之上,它们提供了额外的功能,如图像控制(调整大小,裁剪,修饰等)。