【问题标题】:Storing File in Json Field, Django将文件存储在 Json 字段中,Django
【发布时间】:2020-10-30 16:08:21
【问题描述】:

我正在做一个需要用户提交各种形式的帖子的项目。

有些帖子需要图片,有些帖子需要视频。为了处理这个和其他复杂性,我正在考虑使用jsonfields。

我当前的问题是处理文件,即图像和视频。我希望能够将文件 url 存储在 json 字段中的一个字段中,但我在互联网上没有遇到过这样的事情。

继续采用这种方法是否可行或可取?如果可以,怎么做?

【问题讨论】:

    标签: python django api django-rest-framework django-jsonfield


    【解决方案1】:

    您可以使用 Django 的 FileField https://docs.djangoproject.com/en/3.1/ref/models/fields/#filefield 与 django-rest-framework 配合使用。它完全按照您的预期工作(即返回保存文件的 URL)。

    我更喜欢通过来自django-storagesS3Boto3Storage 使用S3 作为存储。您可以定义一个自定义存储,如

    class MyCustomStorage(S3Boto3Storage):
        location = 'private'
        default_acl = 'private'
        file_overwrite = False
        custom_domain = False
    

    然后在你的模型中:

    class MyModel(models.Model):
        ...more fields...
        attachment = models.FileField(storage=MyCustomStorage(), null=True)
        ...more fields...
    

    【讨论】:

      【解决方案2】:

      您可以使用类似 S3 的服务来实现 AWS S3 或任何替代方案。 如果您需要本地服务并且不想使用 3 方服务,您可以查看minio,它可以在任何服务器上本地设置。 思路如下 您设置 minio/s3 服务并将其用作 django 应用程序的媒体存储(查看django-storages

      因此,无论何时创建帖子,您都可以将所有媒体或静态文件上传到 s3,并在您的帖子对象中使用 url。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-25
        • 1970-01-01
        • 2023-03-26
        • 2010-10-12
        • 1970-01-01
        • 2022-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多