我正在查看关于使用来自heroku的预签名请求直接上传到S3的heroku文档(https://devcenter.heroku.com/articles/s3-upload-python)。
对于下面的代码,您是否希望将实际文件发送到Heroku以获取预签名请求,或者您只是发送文件信息(名称,类型等)?
@app.route('/sign_s3/')
def sign_s3():
S3_BUCKET = os.environ.get('S3_BUCKET')
file_name = request.args.get('file_name')
file_type = request.args.get('file_type')
s3 = boto3.client('s3')
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
)
return json.dumps({
'data': presigned_post,
'url': 'https://%s.s3.amazonaws.com/%s' % (S3_BUCKET, file_name)
})
答案 0 :(得分:0)
您发布的代码仅使用文件名和类型生成S3预先签名的URL,因此它不使用该文件。
服务器生成此S3 URL后,会将其发送给客户端,以便它可以使用此URL上传文件。
所以答案是否定的,你的文件不会发送到Heroku,只是文件信息。该文件将直接从客户端发送到S3。
可以找到有关S3预签名网址的更多信息here