【问题标题】:How to generate signed url in Django Rest for a file in google cloud storage?如何在 Django Rest 中为谷歌云存储中的文件生成签名 URL?
【发布时间】:2019-03-16 14:29:59
【问题描述】:

我正在使用 Django Rest 框架来制作 API。除此之外,我还使用 Google Cloud Storage 来存储媒体文件。我有一些问题:

  1. 如何使用 django rest 框架生成签名文件 url?我一直在网上搜索相同的内容,但无法清楚地了解它。 Link

  2. 那么,如果我删除数据库中的文件,它是否也会自动从 Google 云存储中删除?

提前致谢!!!

【问题讨论】:

    标签: django django-models django-rest-framework google-cloud-storage


    【解决方案1】:

    如何使用 django rest 框架生成签名文件 url?

    django-storage 模块会自动为您解决这个问题。

    您可以很容易地检查它,如果您已将资产上传到服务器,请检查模型 FileField 字段中的 url。 (在我的例子中,它被称为raw

    如果你往右边走,你会在 url 中看到 Signature 参数。如果你重新加载页面,你会看到签名的值发生了变化,证明你实际上是在使用临时签名的 url。

    默认过期时间为 86400 秒(1 天),您可以使用 GS_EXPIRATION 变量来 change

    那么,如果我删除数据库中的一个文件,它会自动从谷歌云存储中删除吗?

    默认情况下不是,但您可以通过overriding您的模型的delete method轻松添加此功能

    class MyModel(models.Model):
        myfile = models.FileField(upload_to='filename/')
    
        def delete(self, *args, **kwargs):
            self.myfile.delete()
            super(MyModel, self).delete(*args, **kwargs)
    

    【讨论】:

    • 感谢@Overdrivr 的回答。有没有办法在不暴露文件夹结构的情况下获取 url?
    • google cloud 和 amazon s3 中的存储桶名称是全球性的,任何人都可以找到它们,因此您不应该依赖它们来保持私有。这意味着 url https://storage.googleapis.com/bucket-name 的开头是公共资源(毕竟,您需要向用户提供存储文件的路径)。如果您需要隐藏存储桶内的文件夹名称(在我的情况下为 raws),您可以简单地将所有文件放在存储桶的根目录,并为每个文件使用唯一 ID。
    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 2014-10-23
    • 2020-08-16
    • 2020-04-10
    相关资源
    最近更新 更多