【问题标题】:How to generate presigned S3 urls using django-storages?如何使用 django-storages 生成预签名的 S3 url?
【发布时间】:2020-10-04 09:49:40
【问题描述】:

我有一个 Django 表单,它通过 django-storages 库将文件保存到 s3 并且工作正常。如何生成并返回预签名的 url,以便用户可以在上传后临时访问文件?这是由 django-storages 抽象出来的还是我必须使用 boto3 api?

我已经花了几个小时浏览 Django-storages 文档,但目前还不是很清楚如何做到这一点..

form.py

class DocumentForm(forms.Form):
    docfile = forms.FileField(
        label='Select a file',
        help_text='max. 42 megabytes'
    )
   name = models.CharField(max_length=20)
   uploaded_at = models.DateTimeField(auto_now_add=True)

views.py

def upload_file(request):
   if request.method == 'POST:
      form = DocumentForm(request.POST)
      if form.is_valid():
         form.save()
         url = #generate pre-signed url of uploaded file here
         return render(request, 'upload_response.html', url)

【问题讨论】:

    标签: django boto3 python-django-storages


    【解决方案1】:

    事实证明,您不需要使用 boto3 来生成预签名 url。 Django-storages 抽象了整个过程。你可以简单地生成它如下docfile.url

    --- 编辑 ----

    供参考,这里是为你生成预签名url的S3存储类方法 https://github.com/jschneier/django-storages/blob/770332b598712da27ecdba75c9e202ad6a1a8722/storages/backends/s3boto3.py#L554

    【讨论】:

    • 我们可以参考这方面的来源吗?
    • 我刚刚编辑了带有参考链接的答案
    【解决方案2】:

    这是在 S3 中为对象生成预签名 url 的示例代码

    import boto3
    
    client = boto3.client('s3')
    response = client.generate_presigned_url('get_object',Params={'Bucket': bucket_name,
                                                                  'Key': objectpath},
                                             HttpMethod="GET", ExpiresIn=expires_in)
    

    【讨论】:

      猜你喜欢
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 2021-07-25
      相关资源
      最近更新 更多