8

サーバーにアップロードされているファイルの再開可能なオンザフライハッシュ生成を実現したいと思います。ファイルが大きいので、HttpServletRequestのInputStreamから新しいバイトが到着するので、MessageDigestクラスのupdate(byte [])メソッドを使用しています(ここで説明するように、たとえば、MD5ハッシュを生成するにはどうすればよいですか? )。

すべてが順調に進んでいますが、再開可能なアップロードのサポートを追加したいので、今は面白くなってきています。アップロードが途中で終了した場合、不完全なファイルがディスクに保存されます。ただし、コントローラー(および基盤となるサービス)が終了するため、MessageDigestオブジェクトは失われます。その前に、MessageDigestオブジェクトをディスク(またはDB、関係ありません)にシリアル化して、オブジェクトを再度逆シリアル化したときに一時的な状態を記憶するようにできますか?したがって、アップロードを再開すると(正確なものから)以前に終了した場所なので、冗長なバイトはなく、一部のバイトが欠落していません)、逆シリアル化されたMessageDigestのupdate()を続行すると、最終的に、ファイルが一度にアップロードされた場合と同じ結果(ハッシュ)が得られますか?

4

2 に答える 2

3

this oneまたはthis oneのようなカスタム MD5 実装の 1 つを取得します。シリアライズ可能にするか、単に内部状態を公開してください。アップロードが中止されたときに状態を保持し、アップロードが再開されたときに復元します。

于 2012-08-04T12:46:50.280 に答える
1

ハッシュは計算が安価です (MD5 は 2 倍です。本当に SHA1 は必要ありませんか?)。アップロードが再開されたことを検出したらすぐに、最初からすべてを再ハッシュすることをお勧めします。アップロードが本当に大規模でない限り、実行時間は短くする必要があります。うまくいけば、大規模で中断されたアップロードは少なくなります。

于 2012-08-02T19:46:56.467 に答える