LoginSignup
0
0

More than 5 years have passed since last update.

python botoでS3にファイルuploadする ~Bucketに.(ドット)が入ってる時は実は厄介~

Last updated at Posted at 2016-09-07

環境

python: 2.7.10

コード

Bucketの一覧を取得する

import boto
import boto.s3.connection

conn = boto.s3.connect_to_region(AWS_REGION,
  aws_access_key_id=AWS_ACCESS_KEY_ID,
  aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
  is_secure=True,               # uncommmnt if you are not using ssl
  calling_format = boto.s3.connection.OrdinaryCallingFormat(),
           )

buckets = conn.get_all_buckets()

オブジェクトの中身を取得

 bucket = conn.get_bucket(<Bucketの名前>)
 key = bucket.get_key(<オブジェクト名>)
 print key.get_contents_as_string() # オブジェクトの中身を取得

オブジェクトをアップロード

こちらをimportとする。

from boto.s3.key import Key
 bucket = conn.get_bucket('dev') #アップロード先のBucket名
 fname = 'test_basic_usage.txt' # ここのファイル名は特に使用されない
 with open(fname, 'w') as f:
    f.write('basic_usage') # オブジェクトの中身
 k = Key(bucket)
 k.key = 'AA' # オブジェクト名 もしディレクトリにする場合は'aaa/test'等にする

 k.set_contents_from_filename(fname) # S3に作成したファイルを保存

やってることとしては
test_basic_usage.txt
という名前のファイルをカレントディレクトリに作成し、それを
k.set_contents_from_filename
この処理により、アップロードしている。

そういうわけなので,カレントディレクトリに 'test_basic_usage.txt というファイルができてしまうことに注意

なので、ファイルを消す場合は

 delete_file = os.path.dirname(os.path.abspath(__file__)) + '/' + fname
 os.remove(delete_file)

という処理を上記処理の最後に追加するのが良い。

S3のpathを期限付きで発行する

 bucket = conn.get_bucket('dev') #アップロード先のBucket名
 key = bucket.get_key(<Key名>) # "test/test.csv"等
 url = key.generate_url(5000)

これも、カレントディレクトリに
s3-ap-northeast-1.amazonaws.com/dev//ファイル名
みたいなフォルダとファイルが作成されるので以下のコードで削除することができる。

  shutil.rmtree("s3-ap-northeast-1.amazonaws.com") 
# "s3-ap-northeast-1.amazonaws.com"の部分は適当に弄ってください

参考

http://hacknote.jp/archives/17537/
http://srad.jp/~ninestars/journal/557562/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0