使用boto将公共URL上可用的图像上传到S3

发布于 2021-01-29 15:08:58

我在Python网络环境中工作,我可以使用boto的key.set_contents_from_filename(path / to /
file)将文件从文件系统上传到S3。但是,我想上传已经在网络上的图像(例如https://pbs.twimg.com/media/A9h_htACIAAaCf6.jpg:large)。

我是否应该以某种方式将映像下载到文件系统,然后照常使用boto将其上传到S3,然后删除映像?

理想的情况是,如果有一种方法可以获取boto的key.set_contents_from_file或其他可以接受URL并将其很好地流式传输到S3的命令,而不必显式地将文件副本下载到我的服务器。

def upload(url):
    try:
        conn = boto.connect_s3(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY)
        bucket_name = settings.AWS_STORAGE_BUCKET_NAME
        bucket = conn.get_bucket(bucket_name)
        k = Key(bucket)
        k.key = "test"
        k.set_contents_from_file(url)
        k.make_public()
                return "Success?"
    except Exception, e:
            return e

如上所述,使用set_contents_from_file时,出现“字符串对象没有属性’tell’”错误。将set_contents_from_filename与url一起使用时,出现No
such file or directory
error。该博托存储文档的叶子掉在上传本地文件和未提及远程存储的文件上传。

关注者
0
被浏览
111
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    不幸的是,实际上没有任何方法可以做到这一点。至少目前还没有。我们可以在boto中添加一个方法,例如set_contents_from_url,但是该方法仍然必须将文件下载到本地计算机,然后再上传。它可能仍然是一种方便的方法,但不会为您节省任何费用。

    为了执行您真正想做的事情,我们需要在S3服务本身上具有一些功能,这将使我们能够将URL传递给我们并将其存储到存储桶中。这听起来像是一个非常有用的功能。您可能希望将其发布到S3论坛。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看