大きなファイルのアップロードを、どう作りますか

Web の基礎

ファイルの中身はアプリのサーバーを通さず、期限付きの署名付き URL でブラウザからストレージへ直接送らせ、分けて送って途中から再開できるようにする、と答える問い。後の処理をキューで分けること、届いた物を信じずに確かめること、捨てられた途中の物の片付けまで話します。

まず 4 択で考える

2 問

答えに入れるべき考えを選びます。選ぶと、すぐに正誤と解説が出ます。そのあと下の欄で、自分の言葉で答えてみます。

  1. 問 1数 GB の動画のアップロードを受けるとき、中身の送り先として正しいものはどれか

  2. 問 2大きなファイルを送っている途中で回線が切れた。作りとして正しいものはどれか

2 問中 0 問に答えました

答えてみる

面接官に「大きなファイルのアップロードを、どう作りますか」と聞かれたつもりで、答えを見る前に自分の言葉で、声に出して答えてみます。

解説を読む

聞かれ方から関連するコースまで、この問いの解説を全部ここに置いています。

こう聞かれます

  • 「大きなファイルのアップロードを、どう作りますか」
  • 「数 GB の動画を受け付けるとき、アプリのサーバーで受けてから保存する形で困ることは何ですか」
  • 「アップロードの途中で回線が切れたら、最初からやり直しですか」

面接官が見ている点

  • 大きな中身をアプリのサーバーに通すと、メモリ、接続、時間の上限で詰まると分かっているか
  • 署名付き URL で、ストレージへ直接送らせる形を知っているか
  • 分けて送る、途中から再開する、といった切れたときの備えを考えているか
  • 届いたファイルを信じず、大きさや種類を確かめ、後の処理を分けているか

短い答え

  • ファイルの中身はアプリのサーバーを通さず、サーバーが発行した期限付きの署名付き URL を使って、ブラウザからオブジェクトストレージへ直接送らせます。
  • 大きなファイルは小さな塊 (チャンク) に分けて送り、切れたときは届いていない塊だけを送り直せるようにします。
  • 届いたら完了の知らせを受けて、大きさや種類を確かめ、縮小や変換のような重い処理はキューに入れて別に回します。

この問いを含む分野をレッスンで練習する

レッスンを開く

少し詳しい答え

アプリのサーバーで受けると何が困るか

アプリのサーバーで受けてから保存する形だと、送り終わるまでの長い間、接続とメモリを 1 人のために使い続けます。大きなファイルが何本も同時に来ると、ほかの利用者の普通のリクエストまで遅くなります。前に置いたロードバランサや、サーバーのリクエストの大きさと時間の上限に引っかかって、途中で切られることもあります。

そこで、アプリのサーバーは「誰が、どこへ、何を置いてよいか」を決める役だけにし、重い中身の受け渡しはストレージに任せます。

署名付き URL で直接送らせる

流れは次の通りです。

  1. ブラウザが「このファイルを送りたい」と、名前、大きさ、種類をアプリのサーバーに伝えます
  2. サーバーはログインと権限を確かめ、保存先の名前を自分で決めて、期限付きの署名付き URL を返します
  3. ブラウザはその URL へ、ファイルの中身を直接送ります
  4. 送り終えたら、ブラウザかストレージの通知が、サーバーに完了を知らせます

保存先の名前は、利用者が付けたファイル名をそのまま使わず、サーバーが決めます。ほかの人のファイルを上書きしたり、思わぬ場所に置かれたりするのを防ぐためです。URL の期限は短くし、置ける大きさや種類も、作れる範囲で URL の条件に入れておきます。

分けて送り、途中から再開する

大きなファイルを 1 回で送ると、最後のほうで切れたときに全部やり直しになります。塊に分けて 1 つずつ送り、どの塊まで届いたかを記録しておけば、切れても残りだけを送れます。塊は同時に何本か送れるので、速くもなります。

オブジェクトストレージの多くは、このための「分けて送る」仕組みを持っています。塊の大きさや数の上限はサービスごとに決まっているので、使う物の文書で確かめます。

届いた後の処理

届いたファイルは、送る側の言う種類や大きさを信じず、サーバーの側で中身を確かめます。画像の縮小、動画の変換、ウイルスの検査のような重い処理は、キューに入れて別の働き手に回し、利用者には「処理中」と見せます。終わってから「使える」に変えます。

途中で捨てられたアップロードは、ストレージに塊が残り続け、費用がかかります。一定の期間で消す決まりを付けておきます。

トレードオフ

直接送らせる形は、サーバーの負担が軽く、大きなファイルにも強い一方で、流れが 2 段になり、完了の知らせを取りこぼしたときの手当てが要ります。数 MB のプロフィール画像のように小さく数も少ないなら、アプリのサーバーで受ける素直な形のほうが、作りも確かめも簡単です。ファイルの大きさと数で選びます。

話す例は架空の例で構いません。「動画の投稿で、サーバーが重くなったので署名付き URL に変え、届いた後の変換をキューに回した」のように、何に困って何を変えたかを話せると伝わります。

よくある間違い

  • 大きなファイルもアプリのサーバーで全部受ける 接続とメモリを長く使い、上限で切られます。中身はストレージへ直接送らせます
  • 利用者のファイル名をそのまま保存先に使う上書きや思わぬ場所への保存につながります。保存先の名前はサーバーが決めます
  • 送る側の言う種類と大きさを信じる書き換えられます。届いた後にサーバーの側で中身を確かめます

深掘りの問い

  • 「完了の知らせが来なかったら、どうしますか」「送信中」のまま一定の時間たった物を定期的に調べ、ストレージに実物があれば完了に進め、無ければ取り消す、と答えます
  • 「ダウンロードはどうしますか」これも期限付きの署名付き URL で、ストレージや CDN から直接返し、見てよい人かはサーバーが URL を出す前に確かめる、と答えます
  • 「同じファイルが何度も送られるときは」中身のハッシュで同じ物を見分け、すでにあれば送らずに済ませる手がある、と答えます

確認日 2026年10月30日書き手 小尾 知希 (講師)

技術面接問題の一覧へ戻る