ここにはバックエンドコードのみが記述されています。基本的な考え方は、フロントエンドがファイルをフラグメント化し、アップロードインターフェースにアクセスするたびに、現在のファイル数とフラグメントの総数などのパラメーターをバックエンドに渡します。
すぐ下にコードを貼り付けましょう難しいコードのほとんどはコメントされています:
ファイルエンティティクラスをアップロード:
エンティティークラスには、実用的な属性だけでなく、必要な関数がすでにたくさんあることがわかります。MD5秒で送信される情報など。
1つ目は、ファイルデータ受信ロジックです。これは、コントロールによってアップロードされたファイルブロックデータを受信し、それをサーバーファイルに書き込みます。コントロールは、ブロックのインデックス、サイズ、MD5、および長さの情報を提供しており、ニーズに応じて柔軟に処理でき、ファイルブロックのデータを分散ストレージシステムに保存することもできます。
ファイル初期化セクション
最初のステップ:RandomAccessFile、ランダムアクセスファイルクラスオブジェクトを取得する
2番目のステップ:RandomAccessFileのgetChannel()メソッドを呼び出して、ファイルチャネルFileChannelを開きます。このロジックは最適化できます。将来、分散ストレージが必要になった場合は、分散ストレージに変更して、単一サーバーへの負荷を軽減できます。
ステップ3:現在のブロック数を取得し、ファイルの最後のオフセットを計算する
ステップ4:ファイルのバイト長を取得するために使用される、現在のファイルブロックのバイト配列を取得する
ステップ5:FileChannelクラスFile Channelのmap()メソッドを使用して、ダイレクトバイトバッファーMappedByteBufferを作成する
手順6:ブロックのバイト配列をバッファーの現在の位置にあるmappedByteBuffer.put(byte [] b);
ステップ7:バッファーを解放する
手順8:ファイルが完全にアップロードされたかどうかを確認する
フォルダーのスキャン
ストレージパス生成クラス
さて、これで終わりです。質問や批判があれば、コメントやプライベートメッセージをお待ちしています。私たちは一緒に成長し、一緒に学びます。
最後に、エフェクト画像を入れます
バックエンドコードロジックはほとんど同じで、現在MySQL、Oracle、SQLをサポートしています。使用する前に、データベースを設定する必要があります。私が書いたこの記事を参照できます:http :
//blog.ncmem.com/wordpress/2019/08/07/java 大きなファイルのアップロードとダウンロード/グループへの参加を歓迎し、「374992201