ファイルアップロード

ストックに使う動画・サムネイルをアップロードします。create 権限が必要です。取得した署名付きURLへファイルを直接PUTし、返された path をビデオストックに渡します。ファイル本体をLISTENのAPIサーバーへ送る必要はありません。

以下のパスはすべて https://listen.style/api/v1 に続きます。APIへのリクエストには認証ヘッダーを付けます。署名付きURLへのPUTにはLISTENのトークンを送らないでください。

単一PUT

POST /uploads

{"file_name":"episode.mp4","type":"VIDEO","content_type":"video/mp4"}

type は VIDEO・IMAGE・AUDIO。content_type は任意(既定 application/octet-stream)です。動画の拡張子はMP4・WebM・MOVです。

成功時は 200 と data.upload_url・data.path・data.public_url を返します。PUT時のContent-Typeは発行時に指定したものと同じにしてください。URLの有効時間は動画が3時間、それ以外が1時間です。5 GiB以上のファイルには以下のマルチパートを使用してください。

curl -X PUT "$UPLOAD_URL" -H 'Content-Type: video/mp4' --upload-file episode.mp4

大容量マルチパート(最大100 GiB)

  1. POST /uploads/multipart で開始します。単一PUTと同じ項目に、正確なバイト数 file_size を加えます。
  2. data の upload_id・path を保存し、part_size(512 MiB)単位に分割します。part_count がパート数です。最後のパートだけ小さくできます。public_url も返します。
  3. POST /uploads/multipart/parts で各PUT先を取得します。
  4. 各 upload_url に指定された content_length のバイト列をPUTし、レスポンスの ETag を保存します。
  5. POST /uploads/multipart/complete へ全パートを渡します。成功した後にだけ、返された data.path をストック登録へ使います。

開始例:

{"file_name":"episode.mp4","type":"VIDEO","content_type":"video/mp4","file_size":629145600}

パートURLの取得例(1回1〜100件、重複不可):

{"path":"RETURNED_PATH","upload_id":"RETURNED_UPLOAD_ID","part_numbers":[1,2]}

レスポンスは data 配列の各要素に part_number・upload_url・content_length を含みます。パートURLは12時間有効です。アップロード操作の情報は48時間保持します。

完了リクエスト例:

{"path":"RETURNED_PATH","upload_id":"RETURNED_UPLOAD_ID","parts":[{"part_number":1,"etag":"\"ETAG_1\""},{"part_number":2,"etag":"\"ETAG_2\""}]}

成功時は 200 と data.path・data.public_url を返します。完了の再送は同じ結果を返します。宣言したサイズと実ファイルサイズが違う場合はファイルを削除してエラーにします。

中断・制限

DELETE /uploads/multipart にJSONで path と upload_id を送ると中断します(200、data.cancelled: true)。同じアップロードを後から再開することはできません。

一時アップロードの所有者だけが操作・利用できます。期限切れや未完了のファイルは登録できません。一時アップロード情報は48時間で失効するため、その間に完了・ストック登録してください。大容量でもビデオ利用枠と同時処理数の制限が適用されます。