ファイルのアップロードとダウンロード


一、ファイルアップロードフォーム(common-fileupload-xxx.jarパッケージとcommon-to-xx.jarパッケージ)の分析:1)アップロードファイルの本質はテキストコピーのプロセスである2)技術面では、Javaでは必ずIO操作を使用し、主にバイトフローの方式で3)伝統的な方式で、アップロードファイルフィールドの異なるブラウザに対して異なる解析方式があります。例えば、IE 6:D:\a.jpg、非IE 6:a.jpg)4)は、formをMIMEプロトコルでサーバーにアップロードし、サーバーがバイナリフローで読み書きすることができます。
二)web端:webページにアップロード入力を追加する。<input type=“file”タブを使用して、name属性を設定しなければならない。そうでないと、ブラウザはアップロードファイルデータを送信しない。2)formのenctype属性値をmultimp/form-dataに設定しなければならない。また、MIMBプロトコルを使用してアップロードされたファイルを説明し、アップロードされたデータを受信者が解析して処理する。)3)(common-fileupload-xxx.jarパッケージとcommon-to-xxx.jarパッケージを使用したい)service端:ステップ:1)アップロードファイル工場を作成します。Disc FileItem Factory=new Disck FileItem Factory()。2)メモリ内のキャッシュエリアのサイズfactory.set SizeThrehold(100*1024)を設定します。メモリバッファサイズ100 K 3を設定します。アップロードファイル用の一時ディレクトリfactory.set Repository(new File)を設定します。4)アップロードファイルのオブジェクト【コアオブジェクト】ServletFileUpload upload=new Servlet FileUploadを作成します。5)ファイルがMIMEプロトコルでアップロードされているかどうかを判断し、使用していない場合は異常を投げます。
Boolean flag = upload.isMultipartContent(request);

if (!flag)

throw new FileUploadException();

  
API:1)Disc FileItem Factory一般的な方法:a)コンストラクタpublic Disc FileItem Factory(int sizeTherhold、File repository);b)メモリバッファのサイズを設定する:デフォルトは10 K public void set SizeThreholdとする。c)一時ファイルディレクトリを設定する:デフォルトはjava.io.tmpdir public void set Repository(java.io.File repository);2)ServletFileUpload類:a)アップロードファイルがMIMEプロトコルを使用しているかどうかを判断する。はい、trueに戻りますいいえ、false.bに戻ります。requestのすべてのファイルはListセットを形成しています。FileItemはアップロードフォームのフォーム項目の内容を表しています。ListparseRequest;c)アップロードされたファイル名のエンコードsetHeaderEnccodingを設定する;/encodingはUTF-8に設定されています。アップロードファイルの名前の中国語の文字化問題を解決できます。3)FileItem類(一般フィールドとアップロードフィールドの2つを表します。)aはフォームの普通フィールドですか?はい、trueです。いいえ、false.book isFormFiled()b)通常フィールド要素の属性名String getFiledName()を得る。c)通常のフィールド要素の値String getStringを得る;/encodingはUTF-8に設定されており、通常フィールドの中国語の文字化け問題dを解決することができます。アップロードファイルの名前はString getName()を取得します。二、アップロードファイルの詳細一:中国語の文字化け問題1)普通フィールドの中国語の文字化け問題:fileItem.get String(「UTF-8」);アップロードフィールドの中国語の文字化け問題:void set Header Enccoding(「UTF-8」)二)一時ファイルの削除問題a)FileItem類のdelete()によりbを削除することができますが、削除はIOストリームをオフした後にしなければなりません。削除に失敗しました。同じディレクトリの下で同じファイル名をアップロードする問題:a)ファイル名の前でUUIDコードを一意の識別子としてつづり合わせるだけでいいです。単独のディレクトリの下でファイルが多すぎる問題はアルゴリズムで解決できます。コードは以下の通りです。
private static DBUploadFile initDBUploadFile(FileItem item,HttpServletRequest request, String savePath) { 

String realName = getRealName(item);

String uuidName = getUUIDName(realName);

//         

String upLoadPath = request.getServletContext().getRealPath(

"\\WEB-INF\\" + savePath);

//       ,              

String dirsPath = "\\";

Integer fileCode = realName.hashCode();

Integer tempCode = fileCode;

while (0 != (tempCode = fileCode & 0XF)) {

dirsPath += (tempCode + "\\");

fileCode >>>= 4;

}



//                

String upLoadFilePath = upLoadPath + dirsPath + uuidName;

File upLoadFile = new File(upLoadFilePath);

//      ,    FileNotFind  

File dirFile = upLoadFile.getParentFile();

if (!dirFile.exists()) {

dirFile.mkdirs();

}

DBUploadFile dbUploadFile = new DBUploadFile();

dbUploadFile.setFileName(realName);

dbUploadFile.setFilePath(upLoadFilePath);

dbUploadFile.setFileItem(item);

return dbUploadFile;

}
 
 
 
五】アップロードされたファイルをクライアントが直接アクセスできないディレクトリに安全に入れるための問題a)アップロードされたファイルを、WEB-INF/uplload/ディレクトリの下六に置いておきます。アップロードファイルサイズとファイルタイプの問題:判断した後、カスタム異常の方式コードを破棄します。
//        

long fileSize = item.getSize();

long maxSize = 200 * 1024;

if (0 == fileSize)

throw new NoUploadFileException();

if (maxSize < fileSize) {

item.delete();

throw new UploadFileSizeException(fileSize, maxSize);

}
 
 
 
7.複数のファイルをアップロードするインターフェースの問題:3)ダウンロードファイルリスト(ハードディスク版)aを表示する再帰的な方法でダウンロードできるファイルを検索し、必ず輸出条件bが必要です。Map<UUIDファイル名、リアルファイル名>を使ってダウンロードできるファイルcを収集します。
四.ファイルaをダウンロードします。送ってきた中国語の符号化をURL復号しますb)UUIDファイル名を通して、そのファイルのある本当のディレクトリ5を逆方向に調べます。ファイルのアップロードとデータベースを結合しますa)アップロードファイルを保存しながら、データベーステーブルに書きます。アップロードファイルは一つの記録に対応しています。uuidFileName双方が一致して考えることを確保します。再時計ですかb)ダウンロードする時は、まずハードディスクで、それから表?c)削除する場合は、まずハードディスクから、表?d)事務サポートが必要ですか?1ファイルのアップロードとデータベースの結合1)速度:小さいファイルのファイルはデータベースの中に預け入れて、取り出し速度はわりに速くて、帰りが遅いです。大きなファイルの保存ハードディスクは、取り出し速度がデータベースより速いです。2)同期:データベーステーブルとハードディスクは一致していなければならない。事務のサポートが必要な場合、表の操作が優先され、ハードディスクの後に結論が出た:1)アップロード時、まずデータベース、後のハードディスクの原因:データベースが異常で、ロールバックできます。ハードディスクの内容はロールバックできません。