javascript - 直接上传到 S3
问题描述
我非常努力地在我的 Django 项目上实施本教程,但没有成功。我认为我用来签署帖子的功能无法正常工作。这是我的功能:
def sign_s3(request,*args, **kwargs):
S3_BUCKET = getattr(settings, 'FILEMANAGER_AWS_S3_BUCKET_NAME')
file_name = request.GET.get('file_name')
file_type = request.GET.get('file_type')
s3 = boto3.client('s3',
config = S3ClientCfg(signature_version = 's3v4'),
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
)
# s3 = get_aws_s3_client()
presigned_post = s3.generate_presigned_post(
Bucket = S3_BUCKET,
Key = file_name,
Fields = {"acl": "public-read", "Content-Type": file_type},
Conditions = [
{"acl": "public-read"},
{"Content-Type": file_type}
],
ExpiresIn = 3600
)
response_dict = {
'data': presigned_post,
'url': 'https://%s.s3.amazonaws.com/%s' % (S3_BUCKET, file_name)
}
mimetype = 'application/json'
return HttpResponse(json.dumps(response_dict), mimetype)
实际上,当我查看 Web 控制台时,我看到:
Cross-Origin Request Blocked. (Reason: CORS request did not succeed)
解决方案
实际上我发现了问题所在。在我的签名中,我提到该 URL 将在 3600 秒后过期。您也必须在 CORS 中发出信号。
我的 Bucket CORS 应该如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3600</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
推荐阅读
- javascript - 通过jquery将图表加载到列中后图表不可见
- visual-studio - 从 GitHub 中的现有项目创建新解决方案
- pivot-table - EPPLUS 在数据透视表的特定字段后插入空行
- reactjs - reactjs typescript 如何声明 const response = await login
- azure-cosmosdb - Azure CosmosDb 自动缩放按每小时最大 RU 计费,不计入 RU 利用率
- d3.js - 为什么我的条形图分组在同一个点?
- typo3 - TYPO3 MAUTIC 导致 404
- amazon-web-services - Cognito 用户池 - 通过 REST API 使用刷新令牌
- apache-spark - 火花驱动器吊舱清理
- cmake - Gnome Builder 为 CMake 项目设置源目录