Skip to main content

大容量デジタルコンテンツのアップロード

ガチャに属するデジタルコンテンツは、マルチパートアップロードで分割して送れます。 各操作には対象ガチャへの書き込み権限が必要です。 画像用の公開アセットは対象外です。

手順​

以下のパスには /admin/v2/gachas/{gacha_id}/assets を前置します。 すべてPOSTで、本文はJSONです。

操作接尾辞本文成功応答
開始/begin_multipart_uploadoriginal_name, content_type, data_size201: asset, upload_id
分割URLの発行/issue_multipart_part_urlsasset_id, upload_id, part_count200: part_urls, expires_in_seconds
完了/complete_multipart_uploadasset_id, upload_id, parts200: 実測サイズに更新した asset
中止/abort_multipart_uploadasset_id, upload_id204: 本文なし

開始時の data_size はバイト単位の申告値で、1から5GiBまでを受け付けます。 original_name は拡張子を含めます。 置き場所はサーバが決めるため、URLやS3のキーを渡す必要はありません。

URL発行後、part_urls の part_number に対応するファイル片を upload_url へPUTします。 各PUTの応答からETagを保存し、すべての送信後に完了操作へ渡します。 parts は [{ "part_number": 1, "etag": "..." }] の形です。 パート数と番号は1から10,000までで、番号の重複と空のETagは拒否します。 番号の順序は問いません。 最終パート以外は5MiB以上に分割してください(S3のパート制限)。

ファイル片は管理APIを経由せず、署名付きURLへ直接送ります。 管理APIの認証ヘッダーはPUTに付けません。 署名付きURLの有効期間は応答の expires_in_seconds で確認してください。

再送と中止​

各操作に異なる Idempotency-Key を付け、同じ操作の同じ本文を再送するときは同じキーを使います。 成功応答の再取得には同じキーを使い、期限切れURLを再発行するときには新しいキーを使います。 キーを変えて開始すると別のアセットが作られます。

アップロードを取りやめるときは中止操作を呼びます。 S3での中止が成功した後にアセットの行も削除します。 完了済みのアップロードに中止操作を使わないでください。 完了操作の結果が不明な場合は、同じキーと本文で応答を確認してください。

他ガチャのアセットは404、書き込み権限不足は403、不正な入力は400です。 ストレージなどの想定外の失敗は500で、code は gacha_asset/multipart_upload_failed です。 内部のエラー詳細は応答に含めません。 開始、完了、中止の成功は監査ログに残ります。