サイトアイコン 知的好奇心

Pythonを用いてConoHaオブジェクトストレージにアップロードする処理の検証

Pythonを用いてConoHaオブジェクトストレージにアップロードする処理の検証結果をご紹介します。

オブジェクトストレージの操作に関しては以下の記事をご参照ください。

PythonでConoHaのオブジェクトストレージ操作を行う方法

PythonでConoHaのオブジェクトストレージ操作を行う方法2

条件

前提

「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/



モバイルバージョンを終了