JSP
1 <% - 2 のIntelliJ IDEAによって作成。 3 ユーザー:GHH 4 日:2019年9月1日 5 時間:午後02時27分 6 変更するには、このテンプレートを使用するファイルを| 設定| ファイルのテンプレート。 7 - %> 8 <%@ページのcontentType = "text / htmlの;のcharset = UTF-8"言語= "javaの" %> 9 <HTML> 10 <ヘッド> 11 <タイトル>文件上传</タイトル> 12 < / HEAD> 13 <body> 14 <FORM ACTION = "$ {pageContext.request.contextPath} / uploadServlet" METHOD = "POST"のenctype =」 <input type = "ファイル" NAME = "画像" ID = "画像"> <BR> 16 の<input type = "提出"値= "上传"> 17 </フォーム> 18 </ BODY> 19 </ HTML>
サーブレット
パッケージcom.ghh.upload。 輸入org.apache.commons.fileupload.FileItem; 輸入org.apache.commons.fileupload.FileItemFactory; 輸入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.File; 輸入java.io.FileOutputStreamは、 インポートにjava.io.IOException; 輸入java.io.InputStreamを。 輸入java.time.LocalDate。 輸入はjava.util.List; 輸入java.util.UUID。 / ** * @author GHH *の@date 2019年9月1日14時32分 * @description * / @WebServlet(名= "UploadServlet"、urlPatterns = { "/ uploadServlet"}) publicクラスUploadServletはHttpServletを{延び 保護ボイドdoPostメソッドを(HttpServletRequestのリクエスト、HttpServletResponseの応答)はServletExceptionがは、IOException {スロー のdoGet(要求、応答)。 } 保護されたボイドのdoGet(HttpServletRequestのリクエスト、HttpServletResponseの応答)ServletExceptionがは、IOExceptionが{スロー 入力ストリームは= nullです。 FileOutputStreamのFileOutputStream = NULL; isMultipart = ServletFileUpload.isMultipartContentブール(要求); IF(!isMultipart){ スローのRuntimeException新新( "要求は、ファイルのアップロードをサポートしていません"); } DiskFileItemFactoryアイテムファクトリ新しい新DiskFileItemFactory =(); //ファイルをアップロード3Mより一時ファイル大きな始まりディレクトリ itemFactory.setSizeThreshold(* 3 * 1024 1024); //一時ファイルの格納ディレクトリを指定する 文字列をTEMPPATH = this.getServletContext()getRealPath( "/ TEMP");. するSystem.out.println( "TEMPPATH =" + TEMPPATH)。 TEMP =新しい新しいファイルファイル(TEMPPATH); IF {(temp.exists()!) temp.mkdirs(); } itemFactory.setRepository(TEMP)。 ServletFileUpload servletFileUpload =新しいServletFileUpload(アイテムファクトリ)。 試す{ リスト<FileItem> fileItems = servletFileUpload.parseRequest(リクエスト)。 (FileItem fileItem:fileItems)用{ IF(fileItem.isFormField()){ //普通字段 文字列フィールド名= fileItem.getFieldName()。 ストリングfileValue = fileItem.getString( "UTF-8"); System.out.println(フィールド名+ "====" + fileValue)。 }他{ 文字列fileNameに= fileItem.getName()。 文字列が苦しむ= fileName.substring(fileName.lastIndexOf() ""); UUID UUID = UUID.randomUUID()。 fileNameに= UUID +苦しみます。 System.out.println( "ファイル名が=" + filename)で。 //入力ストリームを取得 = fileItem.getInputStream(IS); //出力ストリームを作成 文字列のパスを= this.getServletContext()getRealPath( "/アップロード");. //日付によると、マルチレベルのディレクトリを作成 LOCALDATE LocalDate.now =今(); int型の年= now.getYear(); int型=月now.getMonthValue(); int型= now.getDayOfMonth日(); パス=パス+ File.separator +年+ File.separator + + +月File.separator日; System.out.printlnは( "パス=" +パス); //親ディレクトリを作成します parentDirファイル=新しいファイル(パス); }最後に { IF {(parentDir.exists()!) parentDir.mkdirs(); } ファイルファイル=新しいファイル(パス、ファイル名)。 FileOutputStream =新たFileOutputStream(ファイル); バイト[]バイト=新しいバイト[1024]; int型のlen = -1; 一方、(!(LEN = is.read(バイト))= - 1){ fileOutputStream.write(バイト0、LEN)。 } fileItem.delete()。 } } }キャッチ(FileUploadException電子){ e.printStackTrace(); {試みる is.closeを(); fileOutputStream.close(); }キャッチ(例外e){ e.printStackTrace(); } } } }