Javaは超大規模なアップロードG、複数の添付ファイルアップロードメソッドをサポートします

Webプロジェクトでのフォルダーのアップロードは、今や主流の要件となっています。OAまたはエンタープライズERPシステムにも同様の要件があります。フォルダをアップロードして階層構造を維持すると、ユーザーを適切に誘導し、ユーザーが使いやすくなります。より高度なアプリケーションサポートを提供できます。

データテーブル構造ファイル

フォルダデータテーブルの構造

ファイルデータテーブルの構造

プロジェクトの中心はファイルをブロックでアップロードすることです。フロントエンドとバックエンドは高度に調整する必要があります。大きなファイルブロックを完成させるには、両方の当事者がいくつかのデータについて合意する必要があります。プロジェクトで焦点を当てる必要がある次の問題。

*スライス方法;

*ファイルの合成方法。

*どのセグメントから中断が開始したか。

強力なjsライブラリを分割して使用して作業を容易にする方法プログラマーの性質上、私はホイールの再発明を余儀なくされていますが、市場にはすでに大きなファイルのホイールがあります。しかし、時間と仕事のために、私はあきらめることができるだけです。最後に、私はバイドゥのWebUploaderを選択して、フロントエンドのニーズを達成しました。

結合する方法は、結合する前に、まず問題を解決する必要があります。ブロックが属するファイルをどのように区別するかです。最初に、フロントエンドを使用して一意のuuidを生成し、ファイルをマークして、すべてのフラグメントリクエストに配置しました。しかし、2回目の送信をやめ、ブロックとファイルの関係を維持するためにMd5を採用しました。

サーバー側でファイルをマージし、レコードをブロックに分割する問題は、この点に関して業界によって実際に提供されています。Xunleiを参照してください。ダウンロードするたびに、ファイルの本体と一時ファイルの2つのファイルが存在します。一時ファイルには、各ブロックの対応するバイトの状態が保存されます。

フォルダー準備ロジック

これらはすべて、フロントエンドとバックエンドの間の密接な接触を必要とします。フロントエンドは、固定サイズに従ってファイルをフラグメント化する必要があり、フラグメントシーケンス番号とサイズをリクエストに含める必要があります。フロントエンドがリクエストをバックグラウンドに送信した後、サーバーはリクエストデータで指定されたフラグメントシーケンス番号と各フラグメントのサイズ(フラグメントサイズは固定で同じ)に従って開始位置を計算し、ファイルフラグメントデータを書き込むだけです。ファイルを入力するだけです。

開発を容易にするために、サーバーのビジネスロジックを次のように分割し、初期化、ブロック処理、ファイルアップロード完了などに分割しました。

サーバーのビジネスロジックモジュールは以下の通りです

 

機能解析:

フォルダー生成モジュール

フォルダがアップロードされた後、サーバーは次のようにコードをスキャンします

初期化ファイルのロジック

フォルダーのロジックを初期化する

ファイルの保存(ファイル情報をデータベースに書き込む)ロジック

 

フォルダーのロジックを記述します

ブロックでアップロードする場合、ブロック処理ロジックは最も単純なロジックである必要があります。Up6はファイルをブロックに分割し、各ブロックデータを識別しています。これらの識別には、ファイルブロックのインデックス、サイズ、オフセット、ファイルが含まれます。 MD5、ファイルブロックMD5(開く必要があります)およびその他の情報。サーバーは、この情報を受信した後、非常に便利に処理できます。たとえば、ブロックデータを分散ストレージシステムに保存します。

マルチパートアップロードは、再開可能なアップロードや一時停止など、プロジェクト全体の基盤であると言えます。これらはすべてブロックに分割する必要があります。

ブロッキングは比較的簡単です。フロントエンドはwebuploaderを採用し、ブロックなどの基本機能がカプセル化されており、使いやすいです。

webUploadが提供するファイルAPIを使用すると、フロントエンドは非常にシンプルになります。

ファイルの削除と進行状況の更新のロジック

部門を組み合わせる必要があります。大きなファイルはフラグメント化されていますが、フラグメント化後の元のファイル機能はないため、フラグメントを元のファイルに結合する必要があります。フラグメントを元の位置に従ってファイルに書き込むだけです。前の原則についてはすでに説明したので、ブロックサイズとブロックシリアル番号がわかっているので、ファイル内のブロックの開始位置を知ることができます。したがって、ここではRandomAccessFileを使用するのが賢明です。RandomAccessFileはファイル内を前後に移動できます。ただし、animalAccessFileのほとんどの機能は、JDK1.4のNIOの「メモリマップファイル」に置き換えられています。このプロジェクトでは、RandomAccessFileとMappedByteBufferを使用してファイルを合成する方法について書きました。対応するメソッドは、uploadFileRandomAccessFileおよびuploadFileByMappedByteBufferです。2つのメソッドコードは次のとおりです。

二次伝達関数

サーバーロジック

データベース検証ロジック。2番目のパス機能は、実際にはデータベース内の同じMD5ロジックをチェックすることです。

誰もが数秒でアップロード機能を発揮したと思いますが、ネットワークディスクからアップロードする場合、アップロードされたファイルが数秒で​​アップロードされることがわかりました。実際、原則を少し学習した学生は、実際にファイルのMD5を確認し、システムにアップロードされたファイルのMD5を記録し、ファイルのコンテンツのMD5値または部分的な値MD5を取得してから、ファイルをアップロードして、一致するシステムで確認することを知っているはずです。データ。

Breakpoint-httpは、2番目の転送の原則を実装しています。クライアントがファイルを選択した後、アップロードをクリックすると、ファイルのMD5値を取得します。MD5を取得した後、システムのインターフェイス(/ index / checkFileMd5)を呼び出して、MD5がすでに存在するかどうかを問い合わせます(このプロジェクトに参加しています) redisを使用してデータを保存し、ファイルのMD5値をキーとして使用します。値はファイルストレージのアドレスです。)インターフェイスはチェックステータスに戻り、次の手順に進みます。コードを見れば誰でも理解できると思います。

まあ、フロントエンドのMD5値もwebuploaderの機能を使用していますが、これはまだ優れたツールです。

コントロールがファイルのMD5を計算すると、md5_completeイベントがトリガーされ、値md5が渡されます。開発者はこのイベントを処理するだけで済みます。

高速アップロードロジック

http

Up6は再開可能な送信を自動的に処理しており、個別に処理するための開発は必要ありません。

これらのパラメーターをf_post.jspで受け取り、処理します開発者はビジネスロジックのみに注意を払う必要があり、他の側面には注意を払う必要はありません。

 

再開可能なアップロードとは、ファイルのアップロードプロセスが中断されることを意味します。人的要因(一時停止)または不可抗力(ネットワークの中断または不十分)により、ファイルのアップロードが途中で失敗しました。次に、環境が復元されたら、ファイルを再アップロードするのではなく、再アップロードします。

前述のように、再開可能なアップロードの機能は、ブロックアップロードに基づいて実装されます。大きなファイルは多数の小さなブロックに分割されます。サーバーは各ブロックのアップロードに成功し、クライアントはアップロードしています。インターフェースは、ファイルの先頭で迅速な検証のために呼び出され、条件は特定のブロックをスキップすることです。

実現原理は、各ファイルがアップロードされる前に、ファイルのMD5値が取得され、ファイルがアップロードされる前にインターフェイス(/ index / checkFileMd5、はい、2番目のパスのチェックインターフェイスでもあります)が呼び出されます。取得されたファイルのステータスが不完全な場合、アップロードされていないすべてのパーツの番号を返します。フロントエンドは、条件のスクリーニングを実行して、アップロードされていないパーツを特定し、アップロードします。

ファイルブロックを受信すると、サーバー上のファイルに直接書き込むことができます。

これはフォルダをアップロードした後の効果です

これは、フォルダがアップロードされた後のサーバー上のストレージ構造です

参照記事:http : //blog.ncmem.com/wordpress/2019/08/12/java-http%E5%A4%A7%E6%96%87%E4%BB%B6%E6%96%AD%E7 %82%B9%E7%BB%AD%E4%BC%A0%E4%B8%8A%E4%BC%A0 /

 

おすすめ

転載: blog.csdn.net/weixin_45525177/article/details/108467701
おすすめ