コマンドラインからファイルをアップロードしたい!
ちょっとしたファイルをObjectStorageにアップロードするには、ポータルからアップロードする方法があります。が、、ある程度大きい(20メガ?)ぐらいのファイルになるとポータルを使ってファイルをアップロードできません。
そんな時にObjectStorageに手軽にファイルをアップロードする方法です。だたし、5Gを超えるファイルはこの方法では扱えませんのでご注意を!
環境はMacですが、Windowsでもcurlが使えればやり方は同じですので、試してみてください。
ObjectStorageからデータを取得する仕方はたくさん情報があったのですが、アップロードの方法がなかったので書いておきました。誰かの参考になれば幸いです。
コマンドラインからの手順
コマンドラインからのファイルをアップロードする場合はざっくり以下の手順になります。めんどくさいですが、これをやらないと使えません!
- 認証
- URLを生成
- ファイルをアップロード
アップロード手順
認証
まず、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
これだけでサクッとファイルをアップロードできます。
シェルで処理したい人向け
めんどくさいからシェルでサクッと処理したい人向けに、下村くんが書いたシェルのコードも載せておきますので、ご参考までに
#!/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を使ってアップロードしてください(笑)