【发布时间】:2020-08-12 18:16:21
【问题描述】:
我正在为客户端将视频文件上传到 s3 的应用程序编写 django 后端。我想使用预签名的 url,所以 django 服务器将签署一个 url 并将其传递回客户端,然后客户端将他们的视频上传到 s3。问题是,generate_presigned_url 方法似乎不知道s3 客户端upload_file 方法...
按照这个example,我使用下面的代码来生成上传的url:
s3_client = boto3.client('s3')
try:
s3_object_name = str(uuid4()) + file_extension
params = {
"file_name": local_filename,
"bucket": settings.VIDEO_UPLOAD_BUCKET_NAME,
"object_name": s3_object_name,
}
response = s3_client.generate_presigned_url(ClientMethod="upload_file",
Params=params,
ExpiresIn=500)
except ClientError as e:
logging.error(e)
return HttpResponse(503, reason="Could not retrieve upload url.")
运行时出现错误:
文件“/Users/bridgedudley/.local/share/virtualenvs/ShoMe/lib/python3.6/site-packages/botocore/signers.py”,第 574 行,在 generate_presigned_url operation_name = self._PY_TO_OP_NAME[client_method] KeyError:“上传文件”
触发异常:
botocore.exceptions.UnknownClientMethodError:客户端没有方法:upload_file
经过调试,我发现 self._PY_TO_OP_NAME 字典只包含here 提供的 s3 客户端命令的子集:
没有upload_file 方法!我使用“list_buckets”尝试了相同的代码,它运行良好,给了我一个预签名的 url,列出了签名者凭据下的存储桶。
那么如果没有 generate_presigned_url 函数中的 upload_file 方法,我该如何实现我想要的功能呢?
谢谢!
【问题讨论】:
标签: python amazon-s3 file-upload boto3 pre-signed-url