【问题标题】:POST url to S3 directly将 url 直接发布到 S3
【发布时间】:2014-09-10 03:38:50
【问题描述】:

给定一个可下载文件的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),我该怎么做?

【问题讨论】:

    标签: python amazon-s3 boto


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,所以如果对象是别人拥有的,就不能这样做了?
    • 您需要对源对象具有读取权限才能复制它。如果它不归您所有,没有专门允许您阅读的权限,并且不公开,则无法复制。
    【解决方案2】:

    可以使用预签名的 URL 将对象直接放入 S3。我不相信你可以让它与 POST 一起工作,因为 POST 必须对请求的正文进行编码,但也许也有办法做到这一点。这个 SO 线程应该很有用:

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

    【讨论】:

    • 对,但这不是从您已经有权访问的文件生成临时文件吗?
    • 确实如此。对不起,我没有仔细阅读你的问题。在这种情况下,很遗憾,答案是否定的。更多讨论请参见stackoverflow.com/questions/7586533/…
    猜你喜欢
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 2019-03-04
    • 2017-03-19
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多