2011-06-14 18 views
2

私は大きなファイル(GB +)をHTTP PUT経由でアップロードできるプロジェクトを進めており、アップロードを再開する方法を実装する必要があります。ファイルがアップロードされてファイナライズされると、ファイルは完成し、変更することはできません。これまでのところ、私は心の中で2つのオプションを持っていますが、完璧にフィットどちらも:HTTPアップロードの再開を実装する最良の方法の提案

オプション1

クライアントは、それが存在しない場合、いずれかの404を返しますファイルの最初のHEAD要求またはファイルを送信します詳細は、X-Can-Resumeなどの行に沿ったHTTP X-Headerなどの現在のサイズや、ファイルを再開できるかどうかを指定するためのもの、およびそれに含まれるバイトを指定するRangeヘッダーなどの詳細が含まれます。これはOKと思われますが、私はHTTP標準から削除するので、X-Headerに熱心ではありません。

オプション2

クライアントが0バイトのContent-Lengthヘッダなし体とPUT要求を送信し、サーバは次にするかどうかを示す308 Resume Incomplete(ここでhttp://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal提案されているように)、または202 Acceptedヘッダを返送することができます再開するか、最初からやり直してください。これは非標準ヘッダーの使用とは別に受け入れられるようです。

これを実装する最良の方法についての他の提案はありますか?

おかげで、 Jのいずれかの解決策で

答えて

0

には、既存のクライアントとサーバ実装が存在しないので、私はあなたが両方をコーディングます推測しています。私は、ギアの提案(ギアズが死んでいることは分かっているかもしれません)と、標準が出現したときに変更する用意があることの間で、最も単純なものと正しいものとの間の適切なバランスを見つけるべきだと思います。

この機能を実装する場合は、クライアントがチャンクでアップロードできるようにして、コンテンツ全体とチャンクにメッセージダイジェストを追加します。

+0

はい、私はクライアントとサーバーの両方の実装をコーディングします。私はギアズが死んでいることを知っていますが、それは私が問題の解決策に見いだした最も近いものです。データを検証するために署名を使用していますが、転送を開始する最善の方法は不明です。私は現時点ではオプション2に向かっていますが、私はまだこの時点でいずれの方法でも確信していません。 – JWood

関連する問題