私はPythonWeb環境で作業しており、botoのkey.set_contents_from_filename(path / to / file)を使用して、ファイルシステムからS3にファイルをアップロードするだけです。ただし、すでにWeb上にある画像をアップロードしたいと思います(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'がありません」というエラーが発生します。urlでset_contents_from_filenameを使用すると、「そのようなファイルまたはディレクトリはありません」というエラーが発生します。botoストレージのドキュメントでは、ローカルファイルのアップロードは省略されており、リモートに保存されているファイルのアップロードについては触れられていません。