ファイルアップロードの処理に注意すべき詳細

3212 ワード

1.ファイルの中国語文字化けし
1.1ファイルの文字化けしを解決する.setHeaderEncoding("UTF-8"); 1.2通常入力項目の文字化けを解決する(フォームタイプがmultipart/form-dataの場合、requestの符号化を設定するのは無効であることに注意).setString("UTF-8");//文字化けしを解決する.フォームを処理する前に、「ServiceleFileUpload」を呼び出すことを忘れないでください.isMultipartContentメソッドは、コミットフォームのタイプを判断し、trueを返す場合はアップロードで処理し、そうでない場合は従来の方法でフォームを処理すればよい.   3. 解析バッファのサイズの設定、一時ファイルの削除解析バッファのサイズの設定:DiskFileItemFactory.setSizeThreshold(1024*1024); 一時ファイルの削除:プログラムでアップロードファイルを処理した後、itemを呼び出すことを忘れないでください.delete()メソッドを使用して、一時ファイル4を削除します.アップロードシステムを作るときは、アップロードファイルの保存ディレクトリに注意してください.このアップロードファイルの保存ディレクトリは絶対に外部に直接アクセスさせてはいけません.
5.アップロードファイルの種類を制限する
アップロードファイルを処理する際、アップロードファイルの接尾辞名が許可されているか否かを判断する
6.アップロードファイルのサイズを制限する
解析器のサーブレットを呼び出すsetFileSizeMax(102410245);アップロードファイルのサイズを制限できます.アップロードファイルが制限を超えると、解析器はFileUploadBaseを捨てます.FileSizeLimitExceededException異常は、プログラマーがこの異常を捕まえるかどうかで、ユーザーに友好的なヒントを与えることができます.
7.空のアップロード入力項目String filename=itemをどう判断するかgetName().substring(item.getName().lastIndexOf("\")+1); ""if(filename==null || filename.trim().equals("")){ continue; }
8、アップロードファイルの上書きを避けるために、プログラムはアップロードファイルを保存する時、各ファイルに対して1つの唯一のファイル名public String generateFilename{//83434-83 u 483-934934 return UUID.randomUUID().toString()+""+filename; }
9、1つのフォルダの下に1000以上のファイルを保存し、ファイルのアクセス性能に影響を与えないように、プログラムはアップロードファイルをばらばらにして保存しなければならない.public String generateSavePath(String path,String filename){ int hashcode = filename.hashCode();//121221 int dir1 = hashcode&15; int dir2 = (hashcode>>4)&0xf;
    String savepath = path + File.separator + dir1 + File.separator + dir2;
    File file = new File(savepath);
    if(!file.exists()){
        file.mkdirs();
    }
    return savepath;
}

10、アップロードの進捗状況を監視するサーブレットFileUpload=newサーブレットFileUpload(factory);upload.setProgressListener(new ProgressListener){public void update(long pBytesRead,long pContentLength,int pItems){System.out.println("現在解析済み:"+pBytesRead);});
11、Webページに動的アップロード入力項目を追加する

DiskFileItemFactoryは、FileItemオブジェクトを作成するファクトリです。このファクトリクラスでは、次の方法が一般的です。

  • public void setSizeThreShold(int sizeThreShold);メモリバッファのサイズを設定します.デフォルトは10 Kです.アップロードファイルがバッファより大きい場合、fileuploadコンポーネントは一時ファイルディレクトリを使用してアップロードファイルをキャッシュし、ストリームがファイルを読み込むときに読むのが一時ファイルです.
  • public void setRepository(java.io.File repository);一時ファイルディレクトリを指定します.デフォルトはSystemです.getProperty(java.io.tmpdir);
  • public DiskFileItemFactory(int sizeThreshold,java.io.File repository)コンストラクション関数
  • サーブレットFileUploadは、アップロードされたファイルデータを処理し、フォーム内の各入力項目をFileItemオブジェクトにカプセル化します。一般的な方法は次のとおりです。

  • boolean isMultipartContent(H ttpServeretRequest request):アップロードフォームがMultipart/form-dataタイプであるかどうかを判断する
  • List parseRequest(HttpServeretRequest request):requestオブジェクトを解析し、フォームの各入力項目を1つのFileItemオブジェクトにパッケージし、すべてのFileItemを保存したListセット
  • を返す
  • setFileSizeMax(long file SizeMax):アップロードファイルの最大値(long形、バイト)
  • を設定します.
  • setSizeMax(long sizeMax):アップロードファイルの総量の最大値
  • を設定します.
  • upload.setHeaderEncoding(java.lang.String encoding);//符号化フォーマット
  • を設定する
  • setProgressListener(ProgressListener pListener):アップロードの進行状況をリスニングする
  • ソース:https://github.com/yvettee36/UploadFile