LoginSignup
1

More than 5 years have passed since last update.

CurlでObjectStorageにファイルをアップロードする方法

Posted at

コマンドラインからファイルをアップロードしたい!

ちょっとしたファイルをObjectStorageにアップロードするには、ポータルからアップロードする方法があります。が、、ある程度大きい(20メガ?)ぐらいのファイルになるとポータルを使ってファイルをアップロードできません。

そんな時にObjectStorageに手軽にファイルをアップロードする方法です。だたし、5Gを超えるファイルはこの方法では扱えませんのでご注意を!
環境はMacですが、Windowsでもcurlが使えればやり方は同じですので、試してみてください。
ObjectStorageからデータを取得する仕方はたくさん情報があったのですが、アップロードの方法がなかったので書いておきました。誰かの参考になれば幸いです。

コマンドラインからの手順

コマンドラインからのファイルをアップロードする場合はざっくり以下の手順になります。めんどくさいですが、これをやらないと使えません!

  1. 認証
  2. URLを生成
  3. ファイルをアップロード

アップロード手順

認証

まず、URL生成のためのtokenを取得します。
${USER}${API_KEY}は自分のものを使用してください。

curl -v -s -f -I -H "X-Storage-User: $USER" -H "X-Storage-Pass: $API_KEY" -X GET https://tok02.objectstorage.softlayer.net/auth/v1.0/

いろんな値が返ってきますが、以下の値はこれから使用するのでメモしといてください。
X-Storage-Url
X-Storage-Token

URLの生成

${storage_url}X-Storage-Urlの値に置き換えてください。${CONTAINER}はObjectStorageで作ったコンテナの名前です。${filename}はアップロードしたファイルの名前です。

url="${storage_url}/${CONTAINER}/${filename}"

これでURLが生成されるので、次のコマンドでファイルをアップロードしてください。
${TMP_FILE}はアップロードするファイルに、${auth_token}X-Storage-Tokenに置き換えて実行してください。

ファイルをアップロード

curl -i -T ${TMP_FILE} -s -X PUT -H "X-Auth-Token: ${auth_token}" $url

これだけでサクッとファイルをアップロードできます。

シェルで処理したい人向け

めんどくさいからシェルでサクッと処理したい人向けに、下村くんが書いたシェルのコードも載せておきますので、ご参考までに

upload.sh
#!/bin/sh

USER='ユーザ名'
API_KEY='APIキー'
CONTAINER='コンテナ'
TMP_FILE='アップロードしたいファイル'

res=`curl -v -s -f -I -H "X-Storage-User: $USER" -H "X-Storage-Pass: $API_KEY" -X GET https://tok02.objectstorage.softlayer.net/auth/v1.0/`
token_flg=0
url_flg=0
for tmp in $res
do
    tmp=`echo $tmp | sed -e 's/[^a-zA-Z0-9:;,._/\\-]//g'`
    if [ $token_flg -eq 1 ]; then
        auth_token=$tmp
        token_flg=0
    fi

    if [ $url_flg -eq 1 ]; then
        storage_url=$tmp
        url_flg=0
    fi

    echo $tmp | grep -q 'X-Auth-Token\:'
    if [ $? -eq 0 ]; then
        token_flg=1
    fi

    echo $tmp | grep -q 'X-Storage-Url\:'
    if [ $? -eq 0 ]; then
        url_flg=1
    fi

done

filename=`basename ${TMP_FILE}`

url="${storage_url}/${CONTAINER}/${filename}"
curl -i -T ${TMP_FILE} -s -X PUT -H "X-Auth-Token: ${auth_token}" $url

5G超えるファイルについて

この方法では5gを超えるファイルは扱えません。どうしても扱いたい場合はあきらめて、PBOXを使ってアップロードしてください(笑)

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
1