DiskFileItemFactoryファイルのアップロードを使用してください

<%@ページのcontentType = "text / htmlの;のcharset = UTF-8" %> 
<HTML> 
<HEAD> 
    <TITLE>上传文件</ TITLE> 
</ HEAD> 
   <BODY> 
     の<div> 
         <フォームアクション= "upFile .doという」METHOD = "POST"のenctype = "マルチパート/フォームデータ"> 
             <TABLE> 
                 <TR> 
                     <TD>姓名</ TD> 
                     <TD> <入力名= "名前"タイプ= "テキスト"> </ TD> 
                     <TD>年龄</ TD> 
                     <TD> <入力名= "年齢"タイプ= "テキスト"> </ TD> 
                     <TD>上传文件</ TD>
                     <TD> <入力名= "ファイル"タイプ= "ファイル"> </ TD> 
                     <TD>の<input type = "提出"値= "上传"> </ TD>  
                 </ TR>
             </ TABLE> 
         </ FORM> 
     </ div> 
   </ BODY> 
</ HTML>

  

コアDiskFileItemFactory API
DiskFileItemFactoryオブジェクトはFileItem工場、ファクトリクラスの一般的な方法が作成されます
。(sizeThreshold INT)1、setSizeThreshold公共ボイド:バッファメモリのサイズを設定するデフォルト値は10Kです。バッファサイズを超えるファイルをアップロードする際に、ファイルアップロードコンポーネントは、ファイルをアップロードするために、一時ファイルキャッシュを使用します。
2、公共ボイドsetRepository(java.io.Fileのリポジトリが ): 。、一時ファイル・ディレクトリを指定します。デフォルト値はSystem.getProperty( "java.io.tmpdirの")
3、公共DiskFileItemFactory(sizeThreshold、java.io.Fileのリポジトリをint型) :コンストラクタ

コアは、API - ServletFileUpload
ServletFileUploadは、アップロードされたファイルのデータを処理し、各エントリは、フォームFileItemオブジェクトにカプセル化されます。一般的な方法:
1、ブールisMultipartContent(HttpServletRequestの要求は):アップロードフォームマルチパート/フォームデータ型かどうかを判断します

図2に示すように、リストparseRequest(HttpServletRequestのリクエスト):要求オブジェクトを解析し、fileItemオブジェクトにエントリの各パッケージを形成し、FileItemの保存されたすべてのリストのコレクションを返します。

3は、setFileSizeMax(ロングfileSizeMax):最大値(単一ファイル)アップロードされたファイルを設定することは、サーバー・ストレージ・スペースが無駄になっているに大きなファイルをアップロードするには、悪意のあるクライアントを防ぐために、単一のファイルのアップロード制限の最大サイズを設定するために使用されます。どのパラメータのバイト長のデジタルです。

4、setSizeMax(長いsizeMaxは)、アップロードされたファイルの合計量(すべてのファイルがアップロードされた)最大値を設定し、コンテンツの実体(すなわち、全てのアップロードデータ)のセットアップ要求メッセージが無駄に大きなファイルをアップロードする悪意のあるクライアントを防止するために、最大サイズ限界でありますサーバー・ストレージ・スペース。どのパラメータのバイト長のデジタルです。

5、setHeaderEncoding(のjava.lang.Stringエンコーディング):セットの符号化形式。メッセージ本文のファイルのアップロード要求は、通常のフォームフィールドの値に加えて、テキスト以外の、ファイルのアップロード・ファイルのパス名テキスト・フィールドは、そのバイトのメモリアレイに格納されているいくつかの文字セット符号化では、Apacheファイルアップロードコンポーネントコンテンツを読み込むときに、彼らは、テキストが返される正しい文字に変換するために使用される文字セットエンコーディングを知っている必要があります。

コアAPI-FileItem
一般的な方法のFileItemクラス:
1、ブールisFormField():FileItem isFormFieldクラスオブジェクトを決定するための方法は、データフィールドは、プレーンテキスト形式でカプセル化し、またはフィールドが一般的な形式である場合フォームフィールドファイルは、trueを返し、それ以外の場合はfalseを返します。

2、文字列のgetName()
ファイルアップロードフィールドを取得するために、ファイル名に。IEやFirefoxはIEだけで、ファイル名に絶対パス、Firefoxのある、ファイル名が同じではありません得ることに注意してください。

3、文字列getFieldNameは()
formタグのname属性の値を返します。

4、空の書き込み(ファイルファイル):指定したファイルに保存されたFileItemメインコンテンツオブジェクトを保存するために使用。対象コンテンツFileItemオブジェクトを一時ファイルに格納されている場合は、この方法が正常に完了した後、一時ファイルが消去される可能性があります。この方法は、文書の通常のフォームフィールドの内容に書き込まれてもよいが、主な目的は、ローカルファイルシステムに格納されたコンテンツファイルをアップロードすることです。

図5に示すように、文字列のgetString():過負荷2の形で定義された文字列を返すようにFileItem格納されたコンテンツ・オブジェクトをストリーミングする:
パブリックjava.lang.StringでののgetString()に、
公共java.lang.StringでgetString(のjava.lang.Stringエンコーディング)がjava.io.UnsupportedEncodingExceptionスロー
前者の文字列に変換するために体の内容によって指定された文字セット符号化パラメータを使用する文字列本体にコンテンツを変換するために、デフォルト文字セット符号化を使用します。コンテンツ要素の一般的なフォームフィールドを読み取る時点で中国の文字化け現象がある場合は、2番目のgetStringメソッドを呼び出し、それを正しい文字セットエンコーディング名を渡してください。

図6に示すように、ボイド削除()メソッドは、一時ファイルを削除する削除し、本文の内容を一時ファイルに格納されている場合、FileItemクラスオブジェクトに格納されたコンテンツを空にするために使用される主な方法を削除します。オブジェクトがガベージが自動的に収集されたFileItemは、一時ファイルを削除しますが、呼び出しは、速やかに、以前の方法とシステムメモリのリソースを解放するために一時ファイルをクリアすることができ、削除が。

実装手順:
1.バッファサイズと一時ファイルのディレクトリを設定し、DiskFileItemFactoryオブジェクトを作成します。
2、DiskFileItemFactoryオブジェクト作成ServletFileUploadオブジェクトとサイズ制限アップロードファイルを設定します。
図3は、すべてのコンテンツを手に入れる、ServletFileUpload.parseRequest方法解決要求オブジェクトを呼び出すListオブジェクトをアップロードしました。
図4は、リスト反復FileItemオブジェクトの各反復で、ファイルがアップロードされているかどうかを決定するために、そのisFormFieldメソッドを呼び出し:
4.1、一般的なフォームフィールド、コールgetFieldName、フィールド名とフィールド値を取得するためにgetStringメソッドのため。
4.2、アップロードされたファイル、のgetInputStreamメソッドは、これによりデータのアップロードを読んで、データの入力ストリームを取得するために呼び出されます。
私たちは、瓶のパッケージを導入する必要があります。

<依存性> 
      <のgroupId>コモン・ファイルアップロード</のgroupId> 
      <たartifactId>コモン・ファイルアップロード</たartifactId> 
      <バージョン> 1.3.1 </バージョン> 
    </依存> 
    <依存性> 
      <のgroupId>コモンズ-IO </のgroupId> 
      <たartifactId>コモンズ-IO </たartifactId> 
      <バージョン> 2.4 </ version>の
    </依存関係>

  コードの実装:

doPostメソッドパブリック(HttpServletRequestのリクエスト、HttpServletResponseの応答)を無効ServletExceptionが、IOExceptionが{スロー

        ( ";のcharset = UTF-8テキスト/ HTML"); response.setContentTypeは

        //パーサ施設作成
        ; DiskFileItemFactory新しい新しいDiskFileItemFactory工場=()
        //セットメモリバッファサイズの工場出荷時のデフォルトは10Kです
       // factory.setSizeThreshold(* 1024 1024); 
        //工場を設定し、一時ファイルディレクトリ:アップロードファイルのサイズがバッファサイズよりも大きい場合には、一時ファイルのディレクトリキャッシュファイルのアップロードの使用
        factory.setRepository(新しい新しいファイル(「D:ヨーホーの\\ \\」)); 
       //ファイルアップロードパーサ
        ServletFileUpload =アップロード新しい新ServletFileUpload(工場); 
       //すべてのデータがバイト1Mロングでは、最大値をアップロード設定
        アップロード.setSizeMax(1024 * 1024); 
        //単一ファイルのアップロードのための最大値を設定する 
        upload.setFileSizeMax(* 1024 1024)。
        //エンコーディングフォーマットセット 
                    //アップロードファイル、ファイルアップロードフィールドのファイル名を取得
        upload.setHeaderEncoding(「UTF-8」); 

        試み{ 
            //要求を解析し、各オブジェクトのエントリフォームはFileItemにカプセル化され
            、リスト<FileItem> = upload.parseRequest itemListの(要求)
            (:itemListのFileItemアイテム)のため{ 
                //入力通常のファイルエントリのタイプ又は決定
                IF(item.isFormField()){ 
                    //共通エントリをname属性値入力与える
                    ;)文字列名= item.getFieldNameを(
                    エントリを取得//値
                    文字列値= item.getString( "UTF-8"); 
                    のSystem.out.println( "NAME =" +名+ "値=" +値); 
                }他{
                    // IEはファイル名のみで、FireFoxの絶対パスで、取得したファイル名のIEやFirefoxは同じではないことに注意してください。
                    Item.getName fileNameに=文字列(); 
                    のSystem.out.println(filename)で; 
                    // formタグのname属性の値を返す
                    namede item.getFieldName =()文字列と、
                    のSystem.out.println(namede); 

                   //方法:指定されたファイルパスにアップロードファイルを保存
                    するInputStream item.getInputStreamは=()である; 
                    =新しい新しいのFileOutputStream( "D:\\ \\ WPS" + fileNameに)のFileOutputStreamのFOS; 
                    バイト[] = BUFF新しい新しいバイト[1024]; 
                    int型のlen = 0; 
                    一方((LEN = is.read(BUFF))> 0){ 
                        fos.write(BUFF)。 
                    } 

                    //方法2:指定されたパスを保存する
                    //指定されたファイルに格納されたコンテンツFileItemオブジェクト本体を保存します。
                    対象コンテンツFileItemオブジェクトは、一時ファイルに格納されている//場合は、この方法が正常に完了した後、一時ファイルが消去される可能性がある
                    item.writeに(新しいファイル(「D: \\ sohucache \\」+ファイル名) ); 
                    is.close(); 
                    fos.close(); 
                } 
            } 
        }キャッチ(例外E){ 
            e.printStackTrace(); 
        } 

    } 
//結果:
//プレーンテキスト
名=名値= Iを待つ
名前=年齢25 =値
//ファイル名:FirefoxはIEブラウザは、絶対パスで,,ファイル名です
asosResult.txt 
name属性値に// JSP 
ファイルの

テキストます。https://blog.csdn.net/u014785687/article/詳細/ 73863964

  

おすすめ

転載: www.cnblogs.com/xieguolin/p/10943000.html