10. ファイルストレージ¶
ここではファイルストレージの利用方法について説明します。
10.1. ファイルバケット¶
ファイルバケットは、baas.FileBucket クラスのインスタンスで表現します。 コンストラクタの引数には Service と バケット名を渡します。
ファイル操作にはバケットが必ず必要になります。
bucket = baas.FileBucket(service, "FileBucket1");
10.2. ファイルの新規アップロード(保存)¶
ファイルを新規アップロードするには、FileBucket の create() を使用します。
create() にはファイル名、データ本体、Content-Type、ACLなどを指定します。 返り値にはファイルメタデータ(dict)が返ります。
data = "TEST DATA"
meta = bucket.create("test1.txt", data.encode(), content_type="text/plain")
データ本体には、bytes や file-like オブジェクトを指定できます。
ファイルを開いて streaming でアップロードする例を示します。
with open("sample.jpg", "rb") as f:
meta = bucket.create("sample.jpg", f, content_type="image/jpeg")
ファイルの open 時には "b" (binary) オプションを付けるようにしてください。
10.2.1. アクセス制御¶
ファイル単位でアクセス制御を行うことができます。
アクセス制御を行う場合には、create() の acl キーワード引数に ACL を設定します。 ACL は Nebula.Acl クラスインスタンスとして生成します。
acl = {
"owner": "...",
"r": [...],
"w": [...],
"u": [...],
"d": [...],
"admin": [...]
});
meta = bucket.create("test1.txt", data.encode(), content_type="text/plain", acl=acl)
10.3. ファイルのダウンロード¶
ファイルをダウンロードするには download() を使用します。 デフォルトでは、データはメモリ上にロードされます。
返り値は requests ライブラリの Response 型となります。 データを取得するには、content, text, json() のいずれかを利用します。
resp = bucket.download("test1.txt")
binary = r.content # get binary content
#text = r.text # text content
#json = r.json() # json content
ストリーミングでダウンロードすることも可能です。 この場合は stream 引数を True に指定してください。
with bucket.download("file2.zip", stream=True) as r:
for chunk in r.iter_chunk():
# ...
詳細は requests の "Streaming Requests" を参照してください。
10.4. ファイル一覧の取得¶
バケット内のファイル一覧の取得には、query() を呼び出すことで行います。 結果はメタデータ(dict)の配列として返ります。
files = bucket.query()