【问题标题】:What would be the best architectural pattern to store user files in Django?在 Django 中存储用户文件的最佳架构模式是什么?
【发布时间】:2021-02-28 10:27:11
【问题描述】:

我正在寻找一个 Django-Rest 网络应用程序,允许用户存储文件和文件夹,然后他们可以在我的前端查看它们(想想:Dropbox、Google Drive 等)。

我知道 Django 有一个built-in storage api,但在我看来我不能使用它,因为它只处理文件上传(我也在寻找上传目录和子目录)。这意味着我需要创建一个自定义方法来完成我想要的。

我无法理解如何处理为此我应该遵循的文件夹结构。

我正在考虑在每个用户注册到平台后为其创建单独的文件夹。这些文件夹将以用户uuid 命名。例如:

  1. 用户:peter123注册
  2. 分配了uc3f-g239-h423-tx3y 的uuid
  3. 在公共目录中创建了一个名为uc3f-g239-h423-tx3y 的文件夹
  4. peter123 上传的所有文件和文件夹随后都存储在文件夹中:uc3f-g239-h423-tx3y

所有后续用户也是如此,他们的个人文件夹名称由他们的 uuid 表示。

结构是这样的:

common
|
|_____uc3f-g239-h423-tx3y
|             |____peter123.txt
|             |____peter123-subfolder
|                        |_____peter123-subfile.csv
|
|_____du3y-dgp7-g9rq-23qp
|             |____bob123.txt
|             |____bob123.mp4
|             |____bob123-subfolder
|                        |_____bob123-subfile.mkv
|

这是实现我想要实现的目标的有效结构吗?我知道某些文件系统(例如ext3)有子目录限制,但其他文件系统(例如ext4)没有。

考虑到上述所有信息,我的问题是:

  1. 我需要注意以这种方式存储文件有什么限制吗?

  2. Django 是否能够管理文件上传/下载,或者我应该寻找其他东西来完成应用程序的这一部分?

我对所有意见持开放态度,因为我知道可能有更好的方法来解决这个问题(我不知道)。我已经对此进行了大量搜索,但正在努力寻找合适的答案。

或者,谁能指出我可以了解这个主题的任何好的资源?

【问题讨论】:

    标签: python django architecture filesystems


    【解决方案1】:

    AFAIK,您可以使用 django-storages 推送到 minio 或 amazon S3,使用小自定义 def gen_path(self, instance, filename): 您可以非常接近您的目标

    【讨论】:

    • 这个答案实际上非常有用。我仍然可以保护用户背后的文件吗?存储在数据对象中会破坏存储目录的全部目的吗? (因为文件对象是非分层的)。
    • 我认为您可以通过查询集或序列化程序控制每个用户的访问。如果您需要其他安全层(通过您的文件管理器),该结构可以提供帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2010-11-24
    • 2011-10-14
    • 2017-04-21
    • 2019-08-05
    • 1970-01-01
    相关资源
    最近更新 更多