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

転載します。https://blog.kuangstudy.com/index.php/archives/486/

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

1.準備

   ファイルアップロードプロジェクトの開発は、最も一般的な機能の一つである、それはデフォルトではファイルのアップロード作業を扱うことができないので、springMVCは、良いサポートファイルのアップロードすることができますが、SpringMVCのデフォルトのコンテキストはMultipartResolverを装備されていません。あなたは春のファイルアップロード機能を使用する場合は、コンテキスト内でMultipartResolverを設定する必要があります。

ファイルをアップロードするためには、フォームは、POSTメソッドに設定する必要があり、およびマルチパート/フォームデータへのenctype:遠位フォームが必要です。この場合にのみ、ブラウザはバイナリデータとしてサーバーにファイルを選択するようにユーザーに送信されます。

詳細説明するフォームのenctype属性:

  • アプリケーション/ X-WWW = form-urlencodedで:デフォルト、唯一のフォームフィールドの値の属性値を処理し、フォームフィールドの値をURLにエンコードするこのエンコーディングプロセスで形成することになります。

  • マルチパート/フォームデータ:この方法をコードするバイナリデータストリームを形成する処理され、このフィールドの内容は、ファイルをコードファイルは、リクエストパラメータはなく、文字エンコーディングにパッケージされる指定。

  • テキスト/平野:「+」記号にスペースを変換することに加えて、他の文字は、符号化処理を行っていない、このメソッドは、フォームから直接メールを送信するために適用されます。

<フォームアクション= ""にenctype = "multipart / form-データ"方式= "ポスト"> 
    の<input type = "ファイル"名= "ファイル" /> 
    の<input type = "提出"> 
</フォーム>

ENCTYPEマルチパート/フォームデータに設定すると、即ち、ブラウザは、バイナリストリーム処理フォームデータを採用すると、アップロードされたファイルを処理するため、元のサーバ側へのHTTPレスポンスを解析することを含みます。2003年には、Apache Software Foundationのは、すぐにファイルをアップロードするための最良の選択サーブレット/ JSPのプログラマになったオープンソース・コモンズのFileUploadコンポーネントを、リリースしました。

  • Servlet3.0仕様では、すでにファイルのアップロードを処理するための方法を提供しますが、このニーズは、サーブレットのアップロードに行われます。

  • Spring MVCのは、シンプルなパッケージを提供します。

  • Spring MVCのファイルのアップロードこのサポートを直接サポートしていMultipartResolverプラグアンドプレイの実装です。

  • CommonsMultipartResolver:Spring MVCのはMultipartResolver実装クラスを達成するためにはApache CommonsのするFileUpload技術を使用して。そのため、== SpringMVCファイルのアップロードも==はApache CommonsのするFileUploadコンポーネントに依存する必要があります。

2.ファイルには、2つのコードをアップロード

ステップ:

  1. pom.xmlにjarファイルのパッケージを追加します。

  2. 配置springmvc-servlet.xml

  3. フロントページを書きます

  4. ライトバックエンド

  5. テスト

(1)コード:

pom.xmlにjarファイルのパッケージを追加します。

<! -文件上传- > 
<依存> 
    <groupIdを>コモンズ-ファイルアップロード</ groupIdを> 
    <たartifactId>コモンズ-ファイルアップロード</たartifactId> 
    <バージョン> 1.3.3 </バージョン> 
</依存関係> 
<! -サーブレットAPI导入高版本的- > 
<依存性> 
    <groupIdを>のjavax.servlet </のgroupId> 
    <たartifactId>のjavax.servlet-API </たartifactId> 
    <バージョン> 4.0.1 </バージョン> 
</依存>

配置springmvc-servlet.xml

<! -ファイルアップロードの設定- > 
<豆ID = "MultipartResolver" クラス = "org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
    <! -要求された符号化フォーマット、JSP pageEncodingはプロパティを一致しなければなりません、 > - ISOとフォームの内容、デフォルト-8859-1を読み取る権限
    値=「UTF-8」/>「defaultEncoding」<プロパティ名= 
    !< -バイト単位で、アップロード制限サイズを(= 10485760 、10M) - > 
    <プロパティ名= "maxUploadSize"値= "10485760" /> 
    <プロパティ名= "maxInMemorySize"値= "40960" /> 
</豆>

フロントページを書きます

<%@ページのcontentType = "text / htmlの;のcharset = UTF-8"言語= "javaの" %> 
<HTML> 
  <HEAD> 
    <TITLE>アップロード</ TITLE> 
  </ HEAD> 
  <BODY> 

  <H1>方式1 </ H1> 
  <FORM ACTION = "$ {pageContext.request.contextPath} /アップロード"のenctype = "マルチパート/フォームデータ" METHOD = "POST"> 
    の<input type = "ファイル" NAME = "ファイル" /> 
    <入力タイプ= "提出"値= "アップロード"> 
  </ FORM> 

  </ BODY> 
</ HTML>

ライトバックエンド

インポートorg.springframework.web.bind.annotation.RequestMapping;
 インポートorg.springframework.web.bind.annotation.RequestParam;
 インポートorg.springframework.web.bind.annotation.RestController;
 インポートorg.springframework.web.multipart.commons。 CommonsMultipartFile; 

インポートするjavax.servlet.http.HttpServletRequest;
 インポート java.io. * ; 

@RestController 
パブリック クラスFileController { 


    // @RequestParam(「ファイル」)CommonsMultipartFileにパッケージ名=ファイル取得したターゲットファイルを制御するために、
     @ 一括アップロードCommonsMultipartFile配列に比べ 
    RequestMapping(「/アップロード」@ 公衆FileUploadのString(@RequestParam( "ファイル")CommonsMultipartFileファイル、HttpServletRequestのリクエスト)がスローIOExceptionが{ 

        // ファイル名を取得:file.getOriginalFilename(); 
        文字列uploadFileName = file.getOriginalFilenameを(); 

        // ファイル名が直接戻って、nullの場合ホームへ!
        IF( "" .equals(uploadFileName)){
             リターン "filenameがNULLである!!" ; 
        } 
        のSystem.out.println( "アップロードファイル名:" + uploadFileName); 

        // アップロード設定保存パス 
        文字列のパス= request.getServletContext ().getRealPath(「/アップロード」);
         // パスが存在しない場合、作成する 
        ファイルのrealpathを= 新新ファイル(パス);
         IF(!{RealPath.exists())
            realPath.mkdir(); 
        } 
        System.out.printlnは( "アドレスを保存するには、アップロードファイル:" + 実パス); 

        のInputStream IS = file.getInputStream(); // ファイル入力ストリーム 
        のOutputStream OS = 新しい新たFileOutputStream(新しい新規ファイル(のrealpath、uploadFileNameを)); // ファイル出力ストリーム

        // リードライト
        INT LEN = 0 ;
         バイト []バッファ= 新しい新しい バイト [1024 ];
         一方、((LEN = is.read(緩衝液))= - !1){
            os.write(バッファ、0 、)でlen; 
            os.flush(); 
        } 
        にos.close()を; 
        is.close(); 
        戻り値は、 "正常にアップロード!" ; 
    } 
    
}

テストは成功です!

(1)コードII:

file.Transtoを使用すると、アップロードしたファイルを保存します

フロントページを書きます

<H1>采用file.Transto来保存上传的文件</ H1> 
<FORM ACTION = "$ {pageContext.request.contextPath} / upload2"のenctype = "マルチパート/フォームデータ" METHOD = "POST"> 
  の<input type = "ファイル"名= "ファイル" /> 
  <入力タイプ= "提出"値= "アップロード"> 
</フォーム>

ライトバックエンド

/ * 
 *使用file.Transtoアップロードされたファイルを保存します
 * / 
@ RequestMapping( "/ upload2を" 公共文字列fileUpload2(@RequestParam( "ファイル")CommonsMultipartFileファイル、HttpServletRequestのリクエスト)スローにIOException { 

    // 設定保存するためにアップロードパスを 
    文字列のパスをrequest.getServletContext =()getRealPath( "/アップロード。" ); 
    ファイルのrealpath = 新しい新しいファイル(パス);
     IF(!{realPath.exists())
        realPath.mkdir(); 
    } 
    // アップロードアドレス 
    のSystem.out。 println(「アドレスを保存するには、アップロードファイル:」+ 実パス); 

    // 書き込みファイルを直接CommonsMultipartFile(この時に注意してください)によって、
    file.transferTo(新しいファイル(実パス+ "/" + file.getOriginalFilename())); 

    リターン "上传成功!!" 
}

テストは成功です!

3.ダウンロード

ダウンロード手順:

  1. 最初のセットに対する応答

  2. ファイルを読む - InputStreamを

  3. 書き込みファイル - のOutputStream

  4. 操作を実行します

  5. 閉じるストリーム(第一スイッチ)

フロントページを書きます

<a href="${pageContext.request.contextPath}/download">点击下载する</a>

ライトバックエンド

プロジェクトディレクトリのフォルダにアップロードファイルは、画像の.png画像を取得するためのコードをパックダウンロード

@ RequestMapping(値= "/ダウンロード" 公共の文字列ダウンロード(HttpServletResponseの応答、HttpServletRequestのリクエスト)がスロー例外{
     //を絵アドレスダウンロードするには 
    文字列のパス= request.getServletContext()getRealPath( "/アップロード" ;)
    文字列fileNameに =を「コード画像の.png」; 

    // 1、最初の応答に応答が提供さ 
    response.resetを(); // ページがキャッシュされていない設定し、空きバッファ 
    response.setCharacterEncoding(「UTF-8」); // 文字コード 
    response.setContentTypeを( "マルチパート/フォームデータ「); // バイナリ送信データ
     // 設定応答ヘッダ 
    response.setHeader(」コンテンツの廃棄」 "添付; fileNameに=" + URLEncoder.encode(ファイル名、 "UTF-8" )); 

    ファイルファイル = 新しい新しいファイル(パス、ファイル名);
     // 2、ファイル読み取り-入力ストリーム 
    入力ストリームのINPUT = 新しい新しい(のFileInputStreamをファイル);
     // 3は、ファイル書き込み-出力ストリーム 
    のOutputStream OUT = response.getOutputStream(); 

    バイト [] = BUFF 新しい新しい バイト [1024 ];
     int型のインデックス= 0 ;
     // 4、行う書き込み動作を。
    しばらく(( !input.read指数=(BUFF))= -1 ){ 
        out.write(BUFF、 0 、インデックス); 
        out.flush()。
    } 
    out.close()。
    )(input.close。
    リターン ヌル
}

テストは成功です!

 

おすすめ

転載: www.cnblogs.com/zhihaospace/p/12340010.html