如何使用 django-storages 生成预签名的 S3 url?
How to generate presigned S3 urls using django-storages?
我有一个 Django 表单,它通过 django-storages 库将文件保存到 s3,并且工作正常。我如何生成 return 预签名 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)
这是为 S3
中的对象生成 pre-signed 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)
事实证明您不需要使用 boto3 来生成预签名 url。 Django-storages 抽象了整个过程。您可以简单地按如下方式生成它 docfile.url
.
--- 编辑 ----
供参考,这里是S3存储class方法,为你生成预签名url
https://github.com/jschneier/django-storages/blob/770332b598712da27ecdba75c9e202ad6a1a8722/storages/backends/s3boto3.py#L554
我有一个 Django 表单,它通过 django-storages 库将文件保存到 s3,并且工作正常。我如何生成 return 预签名 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)
这是为 S3
中的对象生成 pre-signed 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)
事实证明您不需要使用 boto3 来生成预签名 url。 Django-storages 抽象了整个过程。您可以简单地按如下方式生成它 docfile.url
.
--- 编辑 ----
供参考,这里是S3存储class方法,为你生成预签名url https://github.com/jschneier/django-storages/blob/770332b598712da27ecdba75c9e202ad6a1a8722/storages/backends/s3boto3.py#L554