最初にローカルファイルを作成してからs3サーバーにアップロードせずに、動的に生成されたファイルをAmazon s3に直接アップロードする実行可能な方法はありますか? 私はパイソンを使用しています。ありがとう
50536 次
12 に答える
26
以下は、イメージをダウンロードして (リクエスト ライブラリを使用)、ローカル ファイルに書き込まずに s3 にアップロードする例です。
import boto
from boto.s3.key import Key
import requests
#setup the bucket
c = boto.connect_s3(your_s3_key, your_s3_key_secret)
b = c.get_bucket(bucket, validate=False)
#download the file
url = "http://en.wikipedia.org/static/images/project-logos/enwiki.png"
r = requests.get(url)
if r.status_code == 200:
#upload the file
k = Key(b)
k.key = "image1.png"
k.content_type = r.headers['content-type']
k.set_contents_from_string(r.content)
于 2015-06-11T17:18:00.273 に答える
13
botoライブラリのKeyオブジェクトには、興味のあるメソッドがいくつかあります。
set_contents_from_string の使用例については、完全を期すためにここに貼り付けた boto ドキュメントの「データの保存」セクションを参照してください。
>>> from boto.s3.key import Key
>>> k = Key(bucket)
>>> k.key = 'foobar'
>>> k.set_contents_from_string('This is a test of S3')
于 2012-09-24T18:19:53.407 に答える
2
def upload_to_s3(url, **kwargs):
'''
:param url: url of image which have to upload or resize to upload
:return: url of image stored on aws s3 bucket
'''
r = requests.get(url)
if r.status_code == 200:
# credentials stored in settings AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, host=AWS_HOST)
# Connect to bucket and create key
b = conn.get_bucket(AWS_Bucket_Name)
k = b.new_key("{folder_name}/{filename}".format(**kwargs))
k.set_contents_from_string(r.content, replace=True,
headers={'Content-Type': 'application/%s' % (FILE_FORMAT)},
policy='authenticated-read',
reduced_redundancy=True)
# TODO Change AWS_EXPIRY
return k.generate_url(expires_in=AWS_EXPIRY, force_http=True)
于 2016-10-07T06:53:31.207 に答える
2
を使用しているとしますboto
。はオブジェクトを受け入れ、ファイルにデータを書き込むために記述したコードは、オブジェクトへの書き込みに簡単に適応できるはずboto
です。または、文字列を生成する場合は、.Bucket.set_contents_from_file()
StringIO
StringIO
set_contents_from_string()
于 2012-09-24T18:17:12.993 に答える
0
smart_open
( https://pypi.org/project/smart_open/ )を試すことができます。私はまさにそのためにそれを使用しました: S3 で直接ファイルを書きます。
于 2018-08-28T18:10:24.243 に答える