在哪里存储用户文件上传?

Where to store user file uploads?

在我的 compojure 应用程序中,我应该在哪里存储用户上传文件?我是否只是在我的项目根目录中创建一个 user-upload 目录并将所有内容都粘贴在那里?有什么我应该做的特别的事情(类路径、权限等)吗?

要正确回答您的问题,您需要考虑上传文件的生命周期。我会开始回答以下问题:

  • 文件有多大?
  • 哪些存储选项可以容纳足够的数据来存储所有上传的数据?
  • SLA、冗余和灾难避免怎么样?
  • 如何以及由谁监控存储的空闲 space 和运行状况?

一般来说,文件系统的位置远不如它后面的块设备重要:只要您的数据存储得足够安全以供您的应用程序使用,user-upload 可以在任何地方,可以是任何来自常规磁盘到 S3 bucket e.g. via s3fs-fuse

将这样的文件夹放在类路径中对我来说听起来很奇怪。它没有提供任何基本好处,因为您将始终需要通过配置条目来说明从何处存储和读取文件。

权限方面,您的应用程序至少需要对上传存储的写入权限(很可能还需要读取权限)。授予此类权限取决于您选择的物理设备:如果您按照问题中的建议选择本地文件系统,则需要确保 Clojure 应用程序由具有 chmod +rw 的用户 运行,但在 S3 的情况下,您将需要配置 API 键。

除了练习题,我建议使用数据库,例如 Postgres 或 Datomic。通过这种方式,您可以获得具有真实事务的数据库的可靠性,以及从任何位置通过网络访问文件的能力。