从heroku获取预先签名的请求

时间:2016-10-07 20:17:17

标签: python heroku amazon-s3

我正在查看关于使用来自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)
  })

1 个答案:

答案 0 :(得分:0)

您发布的代码仅使用文件名和类型生成S3预先签名的URL,因此它不使用该文件。

服务器生成此S3 URL后,会将其发送给客户端,以便它可以使用此URL上传文件。

所以答案是否定的,你的文件不会发送到Heroku,只是文件信息。该文件将直接从客户端发送到S3。

可以找到有关S3预签名网址的更多信息here