Pythonを用いてConoHaオブジェクトストレージにアップロードする処理の検証
Pythonを用いてConoHaオブジェクトストレージにアップロードする処理の検証結果をご紹介します。
オブジェクトストレージの操作に関しては以下の記事をご参照ください。
PythonでConoHaのオブジェクトストレージ操作を行う方法
PythonでConoHaのオブジェクトストレージ操作を行う方法2
条件
- ConoHaオブジェクトストレージ
- Ubuntu 18.04 LTS
- Python 3.6.8
前提
「sample2」というコンテナが存在し、web公開設定がなされているものとします。
使用したソース
以下のようなソースを用いて、オブジェクトのアップロードを行いました。
# uploadTest.py import requests import json from logging import getLogger, StreamHandler, Formatter, DEBUG, FileHandler from os import path ## ログ出力設定 logger = getLogger("オブジェクトストレージ操作") logger.setLevel(DEBUG) # コンソール出力設定 stream_handler = StreamHandler() formatter = Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') stream_handler.setFormatter(formatter) logger.addHandler(stream_handler) # 接続パラメータ USER_NAME = "gncu00000000" PASSWORD = "passpasspass" TENANT_ID = "9999999999999999999999999" URL = 'https://identity.tyo2.conoha.io/v2.0/tokens' OBJECT_STORAGE = 'https://object-storage.tyo2.conoha.io/v1/nc_9999999999999999999999999999' # オブジェクトストレージ情報 CONTAINER1 = 'sample1' CONTAINER2 = 'sample2' UPLOAD_SRC = '/home/images/1.jpg' UPLOAD_DIST = '1.jpg' def getToken(): """ tokenの取得 """ headers = { 'Accept': 'application/json', } data = '{"auth":{"passwordCredentials":{"username":"%s","password":"%s"},"tenantId":"%s"}}' % (USER_NAME, PASSWORD, TENANT_ID) #logger.debug(data) response = requests.post(URL, headers=headers, data=data) data = response.json() return json.dumps(data["access"]["token"]["id"], indent=4) def uploadObject(token): """ オブジェクトのアップロード """ headers = { 'Accept': 'application/json', 'X-Auth-Token': token, } with open(UPLOAD_SRC, 'rb') as image: response = requests.put(OBJECT_STORAGE + '/' + CONTAINER2 + '/' + UPLOAD_DIST, headers=headers, data=image) return response def main(): """ 実処理(main) """ token = getToken().replace('\"', '') # tokenの取得 result = uploadObject(token) # オブジェクトのアップロード logger.debug('オブジェクトのアップロード:' + str(result)) if __name__ == '__main__': """ main関数を実行 """ main()
検証結果
アップロード先の指定を色々と変えて、どのような結果になるか検証しました。
ファイル名のみ
アップロードファイル指定
アップロードファイルを以下のように指定します。
UPLOAD_DIST = '1.jpg'
実行
$ python3 uploadTest.py 2019-09-04 13:16:08,887 - オブジェクトストレージ操作 - DEBUG - オブジェクトのアップロード:<Response [201]> $
実行結果
「sample2」の直下にアップロードされます。
以下のようなURLで参照することが出来ます。
https://object-storage.tyo2.conoha.io/v1/nc_XXXXXXXXXXXXXXXXXXXXXXXXX/sample2/1.jpg
フォルダ名+ファイル名
アップロードファイル指定
アップロードファイルを以下のように指定します。
UPLOAD_DIST = 'test/1.jpg'
実行
$ python3 uploadTest.py 2019-09-04 13:25:38,069 - オブジェクトストレージ操作 - DEBUG - オブジェクトのアップロード:<Response [201]> $
実行結果
「sample2」の下に「test」というフォルダが作成されて、その中にアップロードされます。
以下のようなURLで参照することが出来ます。
(testという階層が追加になりました。)
https://object-storage.tyo2.conoha.io/v1/nc_XXXXXXXXXXXXXXXXXXXXXXXXX/sample2/test/1.jpg
2回目の実行
以下のようなパスを指定して再度実行します。
UPLOAD_DIST = 'test/2.jpg'
「sample2」の下に「test」というフォルダが作成済みなので、「test」フォルダの下にファイルが追加されます。
多段階層
アップロードファイル指定
アップロードファイルを以下のように指定します。
UPLOAD_DIST = 'test1/test2/test3/1.jpg'
実行
$ python3 uploadTest.py 2019-09-04 13:34:33,366 - オブジェクトストレージ操作 - DEBUG - オブジェクトのアップロード:<Response [201]> $
実行結果
「sample2」の下に、指定した通りにフォルダ階層が作成されて、その中にアップロードされます。
以下のようなURLで参照することが出来ます。
https://object-storage.tyo2.conoha.io/v1/nc_XXXXXXXXXXXXXXXXXXXXXXXXX/sample2/test1/test2/test3/1.jpg
フォルダ階層指定
以下のようなパスを指定して再度実行します。
UPLOAD_DIST = 'test1/test2/1.jpg'
指定した階層(test1/test2/)にファイルがアップロードされます。
まとめ
ConoHaオブジェクトストレージでは、フォルダ階層を指定したオブジェクトのアップロード/参照が可能です。
作成できるコンテナ数には上限(1ConoHaアカウントにつき最大100コンテナ)がありますが、フォルダ階層をうまく活用することで、ストレージ上でのオブジェクトのカテゴリ分けが出来そうです。
参考
ConoHa:オブジェクトストレージ
https://www.conoha.jp/objectstorage/