直接将URL发送到S3

时间:2014-09-10 03:38:51

标签: python amazon-s3 boto

给出可下载文件的URL,例如:

http://zannee-docs.s3.amazonaws.com/rockefeller-summary.pdf

有没有办法直接POST / PUT到S3?或者我有必要这样做:

# download the file
requests.get(url, stream=True)

# save the file locally

# upload the local file to S3
s3.upload_file()

如果有办法将其直接上传到S3(无需下载并重新上传到S3),我该怎么做?

2 个答案:

答案 0 :(得分:3)

是的,但如果源URL也在S3中托管,并且您的S3密钥可以访问它。 (文档没有明确说明,但我认为源对象也需要存储在同一个区域。)

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html

由于您正在使用boto,因此您需要的特定API为boto.s3.key.Key.copy()

答案 1 :(得分:0)

可以将预先签名的URL直接用于PUT对象到S3。我不相信你可以用POST工作,因为POST必须对请求的主体进行编码,但也许有办法做到这一点。这个SO线程应该是有用的:

How to generate a temporary url to upload file to Amazon S3 with boto library?