我在Python的Web环境中工作,使用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方法,我遇到了“string object has no attribute 'tell'” 错误。使用set_contents_from_filename方法并提供url时,我遇到了“No such file or directory”错误。 boto存储文档 中只讲解了上传本地文件,并没有提到上传远程文件。