Aws s3 on python

在python要使用aws的s3,官方建議是透過boto這套libs。

Dependency

  • boto

Install

1
sudo pip install boto

Usage

Creating a Connection:

設定access和secret key,其中host為上傳s3位置。

1
2
3
from boto.s3.connection import S3Connection

conn = S3Connection('<aws access key>', '<aws secret key>', host = 's3.amazonaws.com' )

Getting a bucket:

如果你已經在s3的頁面建立好bucket了,可以直接使用get_bucket:

1
bucket = conn.get_bucket( 'mybucket' )

或者自己建立:

1
bucket = conn.create_bucket('mybucket')

Storing Data:

使用key去建立一個檔案,其中k.key這個值,假設有多層folder直接設定在此:

1
2
3
4
5
from boto.s3.key import Key

k = Key(bucket)
k.key = 'folder/test.txt'
k.set_contents_from_string('This is a test of S3')

之後只要在重新連線,透過k.get_contents_as_string()就可以取得到資料了。

如果要上傳一個file的話,可透過set_contents_from_filename,會將你local端的foo.jpg上傳至s3:

1
k.set_contents_from_filename('foo.jpg')

要下載則是採用get_contents_to_filename

1
k.get_contents_to_filename('bar.jpg')

最後如果想透過變數去儲存至s3,一樣使用set_contents_from_string

1
2
3
4
5
6
7
f = open( "foo.jpg", "rb" )

data = f.read()

f.close()

k.set_contents_from_string( data )

以上這些方式,需檢查k.key是否對應好s3上面的路徑。