69 -Java SE-054_ファイルのアップロードとダウンロード

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

-ファイルアップロード

-クライアント

  1は、入力タイプがファイルに設定されています。

  図2は、方法ポストを形成するためのフォームは、(ファイル名ではなくファイル自体よりも、バック渡されるGET)

  3、(バイナリ形式の転送データ)形式のenctypeマルチパート/フォームデータを形成する。

-サーバ

  commons-ファイルアップロードは、コモンズ-ioの

  基本的な考え方:コモンズ・ファイルアップロードはFileItemの一般的なセットを取得するために、要求を解決することができます。

  コモンズ-ファイルアップロードフォームフィールドやファイルのフィールドかどうか、すべての情報要求は、FileItemオブジェクトに解析されていることができます。

  開発者は、FileItemコレクション操作は、アップロードを完了することができますのために。

  アップロードコンポーネントは、集合からの2値データに解析され、したがって、開発を容易にすることができます。

JSP `` ` 
<% - 
  のIntelliJ IDEAによって作成されます。
  ユーザー:サウスウィンド
  日:2019年7月28日
  時間:20時16分
  、このテンプレートを使用するファイルを変更するには|設定|ファイルのテンプレート。 
- %>
<%@ページのcontentType = "text / htmlの;のcharset = UTF-8"言語= "javaの" %> 
<HTML> 
<HEAD> 
    <TITLE>タイトル</ TITLE> 
</ HEAD> 
<BODY> 
    <フォームアクション=」 /upload.do」ENCTYPE = "マルチパート/フォームデータ" METHOD = "POST"> 
        の<input type = "ファイル" NAME = "IMG" /> 
        の<input type = "text"の名= "DESC" /> 
        <入力タイプ= "提出"値= "上传" /> 
    </ FORM> 
</ BODY> 
</ HTML> 
`` ` 



` ``のJava 
パッケージcom.southwind.controller。

輸入org.apache.commons.fileupload.FileItem; 
輸入org.apache。commons.fileupload.FileUploadException; 
輸入org.apache.commons.fileupload.disk.DiskFileItemFactory;
輸入org.apache.commons.fileupload.servlet.ServletFileUpload。

輸入javax.servlet.ServletException;
輸入javax.servlet.annotation.WebServlet; 
輸入javax.servlet.http.HttpServlet。
インポートのjavax.servlet.http.HttpServletRequest; 
インポートのjavax.servlet.http.HttpServletResponse; 
輸入java.io. *; 
輸入はjava.util.List; 

@WebServlet( "/ upload.do")
パブリッククラスUploadServletは延びHttpServletを{ 

    @Overrideは、
    ボイドのdoPost(HttpServletRequestのREQ、HttpServletResponseのRESP)はServletExceptionがを{スロー保護
        //创建DiskFileItemFactory 
        DiskFileItemFactory fileItemFactory =新しいDiskFileItemFactory()。
        //创建文件解析器
        ServletFileUploadアップロード=新しいServletFileUpload(fileItemFactory)。
        //获取FileItem集合
        {試みる
                        int型の温度= 0;
            一覧<FileItem>リスト= upload.parseRequest(REQ)。
            //遍历リスト
            について(FileItem fileItem:リスト){ 
                場合(!fileItem.isFormField()){ 
                    文字列fileNameに= fileItem.getName(); 
                    試す{ 
                        InputStream InputStreamは= fileItem.getInputStream()。
                        文字列パス= req.getServletContext()getRealPath( "")。
                        OutputStream OutputStreamを=新しいのFileOutputStream(パス+ "/ファイル/" + fileNameに)。
                        一方、(!(TEMP = inputStream.read())= - 1){ 
                            outputStream.write(TEMP)。
                        } 
                        inputStream.close()。
                        outputStream.close(); 
                    }キャッチ(IOExceptionを電子){ 
                        e.printStackTrace(); 
                    } 
                } 
            } 
        }キャッチ(FileUploadException電子){ 
            e.printStackTrace(); 
        } 

    } 
} 
`` 



-文件下载

`JSP 
<% - 
  のIntelliJ IDEAによって作成。
  ユーザー:サウスウィンド
  日:2019年7月28日
  時刻:21:43 
  このテンプレートを使用するファイルを変更するには| 設定| ファイルのテンプレート。 
- %> 
<%@ページのcontentType = "text / htmlの;のcharset = UTF-8"言語= "javaの" %> 
<HTML> 
<HEAD>
    <タイトル>タイトル</ TITLE> 
</ HEAD> 
<BODY> 
    <a href="/download.do"> 1.png </a>の
</ BODY> 
</ HTML> 
`` ` 



` `` Javaの
パッケージコム.southwind.controller; 

輸入javax.servlet.ServletException; 
輸入javax.servlet.annotation.WebServlet; 
輸入javax.servlet.http.HttpServlet。
インポートのjavax.servlet.http.HttpServletRequest; 
インポートのjavax.servlet.http.HttpServletResponse; 
輸入java.io.FileInputStream; 
インポートにjava.io.IOException; 
輸入java.io.InputStreamを。
インポートにjava.io.OutputStream; 

パブリッククラスするDownloadServletは{HttpServletを拡張
    @Overrideを
    保護されたボイドのdoGet(HttpServletRequestのREQ、HttpServletResponseのRESP)はServletExceptionがは、IOException {スロー
        resp.setContentType( "アプリケーション/ X-msdownloadを"); 
        文字列filename = "1.png"。
        resp.setHeader( "コンテンツの廃棄"、 "添付ファイル;ファイル名=" + filename)で。
        OutputStreamのOutputStream = resp.getOutputStream()。
        文字列のパス= req.getServletContext()getRealPath( "")+ "/ファイル/" + fileNameに。
        InputStream InputStreamは=新しいFileInputStreamを(パス)。
        int型の温度= 0; 
        一方、(!(TEMP = inputStream.read())= - 1){ 
            outputStream.write(TEMP)。
        } 
        outputStream.close()。
        inputStream。閉じる(); 
    }
} 
`` `

 

 download.jsp

<% - 
  のIntelliJ IDEAによって作成されます。
  ユーザー:サウスウィンド
  日: 2019年7月28日
  時間: 21:43 
  に変更するには、このテンプレートを使用するファイルを| 設定| ファイルのテンプレート。
- %> 
<%@ページのcontentType = "text / htmlの;のcharset = UTF-8"言語= "javaの" %> 
<HTML> 
<HEAD> 
    <TITLE>タイトル</ TITLE> 
</ HEAD> 
<BODY> 
    < HREF = "/ download.do"> 1.png </a>の
    <a href="/download.do"> 1.png </a>の
</ BODY> 
</ HTML>

 

Upload.jsp

<% - 
  のIntelliJ IDEAによって作成されます。
  ユーザー:サウスウィンド
  日: 2019年7月28日
  時間: 20時16分
  に変更するには、このテンプレートを使用するファイルを| 設定| ファイルのテンプレート。
- %> 
<%@ページのcontentType = "text / htmlの;のcharset = UTF-8"言語= "javaの" %> 
<HTML> 
<HEAD> 
    <TITLE>タイトル</ TITLE> 
</ HEAD> 
<BODY> 
    <フォームアクション= "/ upload.do"にenctype = "multipart / form-データ"方式= "ポスト"> 
        の<input type = "ファイル"名= "IMG" /> 
        の<input type = "text"の名= "DESC" /> 
        <

 

 web.xmlの

<?XMLバージョン= "1.0"エンコード= "UTF-8" ?> 
< ウェブアプリののxmlns = "http://xmlns.jcp.org/xml/ns/javaee" 
         のxmlns:XSI = "のhttp://www.w3 .ORG / 2001 / XMLスキーマ・インスタンス" 
         のxsi:schemaLocationの=" http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd " 
         バージョン=" 4.0" > 
</ ウェブアプリ>

 

 

 

 

 

 DownloadServlet.java

パッケージcom.southwind.controller。

輸入javax.servlet.ServletException;
輸入javax.servlet.annotation.WebServlet;
輸入javax.servlet.http.HttpServlet。
インポートのjavax.servlet.http.HttpServletRequest;
インポートのjavax.servlet.http.HttpServletResponse;
輸入java.io.FileInputStream;
インポートにjava.io.IOException;
輸入java.io.InputStreamを。
インポートにjava.io.OutputStream; 

@WebServlet( "/download.do" パブリック クラスするDownloadServletが延びているのHttpServlet { 
    @Override 
    保護 ボイドのdoGet(HttpServletRequestのREQ、HttpServletResponseのRESP)がスローServletExceptionがは、IOException { 
        文字列名 = req.getParameter( "名" ); 
        resp.setContentType( "アプリケーション/ X-msdownload" )。
        文字列filename = "1.png" 
        resp.setHeader( "コンテンツの廃棄"、 "添付ファイル;ファイル名=" + filename)で。
        OutputStreamのOutputStream = resp.getOutputStream()。
        文字列のパス = req.getServletContext()getRealPath( "")+ "/ファイル/" +。ファイル名; 
        InputStream InputStreamは = 新しいですFileInputStreamを(パス)。
        int型の温度= 0 ;
        一方、(!(TEMP = inputStream.read())= - 1 ){ 
            outputStream.write(TEMP)。
        } 
        outputStream.close()。
        inputStream.close(); 
    } 
}

 

UploadServlet.java

パッケージcom.southwind.controller。

輸入org.apache.commons.fileupload.FileItem;
輸入org.apache.commons.fileupload.FileUploadException。
輸入org.apache.commons.fileupload.disk.DiskFileItemFactory;
輸入org.apache.commons.fileupload.servlet.ServletFileUpload。

輸入javax.servlet.ServletException;
輸入javax.servlet.annotation.WebServlet;
輸入javax.servlet.http.HttpServlet。
インポートのjavax.servlet.http.HttpServletRequest;
インポートのjavax.servlet.http.HttpServletResponse;
輸入 java.io. * ;
輸入はjava.util.List;

@WebServlet( "/upload.do" パブリック クラス UploadServletが延びているのHttpServletは{ 

    @Overrideは、
    保護された ボイドのdoPost(HttpServletRequestのREQ、HttpServletResponseのRESP)スロー{ServletExceptionがを
         // 创建DiskFileItemFactory 
        DiskFileItemFactory fileItemFactory = 新しいDiskFileItemFactory()。
        // 创建文件解析器 
        ServletFileUploadアップロード= 新しいServletFileUpload(fileItemFactory)。
        // 获取FileItem集合
        してみてください{ 
            一覧 <FileItem>リスト=upload.parseRequest(REQ)。
            // 遍历リスト
            について(FileItem fileItem:リスト){
                 場合(!fileItem.isFormField()){ 
                    文字列fileNameに = fileItem.getName();
                    試す{ 
                        InputStream InputStreamは = fileItem.getInputStream()。
                        文字列パス = req.getServletContext()getRealPath( ""。 )。
                        OutputStream OutputStreamを = 新しいのFileOutputStream(パス+ "/ファイル/" + fileNameに)。
                        int型の温度= 0;
                        一方、(!(TEMP = inputStream.read())= - 1 ){ 
                            outputStream.write(TEMP)。
                        } 
                        inputStream.close()。
                        outputStream.close(); 
                    } キャッチ(IOExceptionを電子){ 
                        e.printStackTrace(); 
                    } 
                } 
            } 
        } キャッチ(FileUploadException電子){ 
            e.printStackTrace(); 
        } 

    } 
}

 

おすすめ

転載: www.cnblogs.com/HiJackykun/p/11538339.html