前回(新ConoHaのオブジェクトストレージ上のデータをAjaxで取得してみる)の続き。
次はAjaxによるアップロードを試します。
参考サイト
- Upload to OpenStack Swift via CORS/HTML5 request.
まさにやりたいことやってる。これを真似た。 - Direct Browser Uploading – Amazon S3, CORS, FileAPI, XHR2 and Signed PUTs
Amazon S3にアップロードしてる。OpenStackSwiftとはちょっと違うみたい。 - トークン発行 | ConoHa API Documentation
トークン発行方法を調べてたどり着いた。 - cors-swift-example
アップロードサンプル画面のhtml,js,app
コンテナの準備
アップロード先となるコンテナの準備をする。といっても前回の記事から何も変更なかった。アップロード先のコンテナ |
サイトの準備
参考サイト4つ目のGitHubのソースを真似てWebページを作った。(http://localhost:3000/ のホストとしてアクセス)https://github.com/naichilab/cors-swift-example/blob/master/app.js
アップロード処理が書かれてるjsファイル。
URL組み立ててtokenつけてPUTするだけっぽい。
トークンの発行
参考サイト3つ目のConoHaドキュメントを見てみると、トークン発行方法が書かれてる。ターミナルで下記コマンドを実行してトークンを取得する。
curl -i -X POST \ -H "Accept: application/json" \ -d '{"auth":{"passwordCredentials":{"username":"APIユーザー名","password":"APIユーザーパスワード"},"tenantId":"テナントID"}}' \ https://identity.tyo1.conoha.io/v2.0/tokens長々としたJSONが返ってくるのでaccess->token->idをメモる。
どうもトークンは一度発行すると24時間有効みたいですね。
アップロード実行
さきほど立ち上げたサイトのフォームに入力していく。- StorageURL:ConoHaコントロールパネル->API->Object Storage Serviceエンドポイント
- StorageToken:さきほどメモしたトークン
- Container:コンテナ名
こんな感じ |
File Selectionのボタンからファイルを選ぶとアップロードが始まる。
アップロード完了 |
すんなりとアップロードできた。
CyberDuckで確認した。 |
まとめ
- ConoHaのAPIユーザーを使ってトークンを発行する。
- コンテナにX-Auth-Tokenメタデータの設定は不要
だいぶやりたいことに近づいてきたような気がする。
自分のサーバーでトークンを発行してブラウザに渡す→ブラウザが直接オブジェクトストレージにアップロードって感じでいいのかな。
トークンが24時間有効だしこのままじゃ好きなファイルアップロードできちゃうからもーちょい厳しい認証が必要だよなぁ。
どうしたらいいんかな。
関連記事
ConoHa関連の記事をまとめました。ConoHa関連まとめ