如何使用django存储生成预签名的S3 URL



我有一个Django表单,它通过Django存储库将文件保存到s3,并且运行良好。如何生成并返回预先签名的url,以便用户在上传文件后可以临时访问该文件?这是由django存储抽象的,还是我必须使用boto3api?

我花了几个小时浏览Django存储文档,但不太清楚如何做到这一点。。

表格

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存储对整个过程进行了抽象。您可以简单地按照以下docfile.url生成它。

---编辑----

作为参考,这里是S3存储类方法,它为您生成预签名的urlhttps://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)

最新更新