【问题标题】:Ideal location for saving uploaded files in Spring web app在 Spring Web 应用程序中保存上传文件的理想位置
【发布时间】:2018-01-21 10:13:43
【问题描述】:

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

我的应用具有以下结构:

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

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

【问题讨论】:

  • 为什么要在服务器中保留一些东西?特别是如果您使用 AWS,如果您有专用服务器并在单个服务器上运行,则可以将其存储到本地文件,但在所有其他情况下,我建议使用 s3。
  • 这取决于您的目标部署环境。在某些 PaaS 中,您将无法访问本地硬盘驱动器,或者它可能是短暂的,这意味着在迁移 vm、重新启动服务等时,您存储的任何内容都可能被删除。正如@maneesh 提到的,您可以存储它在本地或将其传递给一些存储服务,如 s3。如果您使用 mongo,则可以选择 GridFS。让我们知道您的目标部署平台是什么。
  • 已编辑,我添加了更多信息

标签: spring file-upload web-applications upload


【解决方案1】:

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

应用部署在裸机上

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

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

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

应用部署在云端

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

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

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

在数据库中存储文件

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

专用图片服务

您还可以使用Cloudinary 等专用图像服务。除了存储之外,它们还提供其他功能,例如图像处理(调整大小、裁剪、修饰等)。

【讨论】:

    猜你喜欢
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多