如何使用Django储存空间产生预设S3网址?

问题描述

我有一个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)

解决方法

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

--- 编辑----

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

,

这是为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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...