Skip to content

Profile Images

Player profile image は PlayerServer 内に保持する immutable asset として扱います。

v1 では画像 URL を profile payload に直接入れません。client は me.virmesh.player.prepareProfileImageUpload で upload を予約し、raw route へ binary body を送信してから、me.virmesh.player.updateProfileprofile+me.virmesh.player.card module で参照を貼ります。

Flow

  1. me.virmesh.player.prepareProfileImageUpload に metadata を送る。
  2. server から assetId と 1 回限りの uploadToken を受け取る。
  3. PUT /uploads/profile-images/:uploadToken に raw binary body を送る。
  4. me.virmesh.player.updateProfileprofile+me.virmesh.player.card module の image に asset metadata を設定する。
  5. public profile 取得後、handle.record.playerServer + /profile-images/:assetId から画像を読む。

Prepare Upload

private action me.virmesh.player.prepareProfileImageUpload は画像本体を受け取らず、次の metadata だけを受け取ります。

  • contentType
  • size
  • hash
  • width
  • height
  • updated_at

response には assetIduploadTokenuploadMethoduploadPathexpiresAt が入ります。

Binary Upload Route

予約済みの画像本体は raw route に PUT します。

text
PUT /uploads/profile-images/:uploadToken
Content-Type: image/png | image/jpeg
Body: raw binary bytes

server は prepared upload と照合して次を検証します。

  • token が存在し、失効していない
  • body size が prepareProfileImageUploadsize と一致する
  • body hash が prepareProfileImageUploadhash と一致する

成功時は status+me.virmesh.success.profileImageUploaded を返します。

Public Fetch Route

保存済み asset は public route から取得します。

text
GET /profile-images/:assetId

この route は immutable asset を返します。レスポンスの Content-Type は保存済み metadata に従います。

profile payload には URL が入らないため、client は me.virmesh.player.resolveProfile で得た handle.record.playerServer を使って取得 URL を組み立てます。

text
{handle.record.playerServer}/profile-images/{assetId}

Constraints

  • v1 の対応形式は image/pngimage/jpeg
  • asset は public-only
  • 画像参照は owner 自身の upload 済み asset だけ許可
  • profile+me.virmesh.player.card module では metadata 一致も検証される