이 기사의 예제는 파일 업로드를 공유하고 참조를 위해 Java 구현 코드를 다운로드합니다. 특정 내용은 다음과 같습니다
프론트 데스크 :
1. 제출 방법 : post
2. 양식에는 파일 업로드 된 양식 항목이 있습니다. <input type = "file" />
3. 양식 유형을 지정합니다.
기본 유형 : ENCTYPE = "application/x-www-form-urlencoded"
파일 업로드 유형 : 멀티 파트/양식 데이터
fileUpload
파일 업로드 기능의 개발에 일반적으로 사용되며 Apache도 파일 업로드 구성 요소를 제공합니다!
fileUpload 구성 요소 :
1. 소스 코드를 다운로드하십시오
2. 프로젝트에 JAR 파일을 소개합니다
Commons-FileUpload-1.2.1.jar [파일 업로드 구성 요소 코어 JAR 패키지]
Commons-IO-1.4.jar [파일 처리를위한 자수 관련 도구 클래스]
사용:
공개 클래스 업로드가 httpservlet {// 업로드 디렉토리, 업로드 된 리소스 저장, 공개 void doget (httpservletrequest request, httpservletreponse responsk) servletexception, ioexception, ioexception, ioexception, ioexception, ioexception { / ************** 파일 업로드 ******************************************* // 1. Factory = 새로운 DiskFileItemFactory (); // 2. 파일 업로드 작성 핵심 도구 클래스 ServletFileUpload 업로드 = 새로운 ServletFileUpload (Factory); // 1. 단일 파일에 허용되는 최대 크기를 설정합니다. 30m upload.setfilesizemax (30*1024*1024); // 2. 파일 업로드 양식에 허용되는 총 크기 설정 : 80m upload.setSizemax (80*1024*1024); // 3. 업로드 양식 파일 이름의 인코딩을 설정하십시오. upload.setheaderEncoding ( "UTF-8"); // 3. 결정 : 현재 양식이 파일 업로드 양식인지 (upload.IsMultipArtContent (request)) {// 4. 요청 된 데이터를 파일 오브젝트로 변환 한 다음 <fileItem> list = upload.parseRequest (request); // Traversal : (FileItem 항목 : list)에 대해 업로드 된 각 데이터를 가져옵니다. {// judgement : 정상 텍스트 데이터 if (item.isformfield ()) {// 일반 텍스트 데이터 문자열 fieldname = item.getFieldName (); // 폼 요소 이름 문자열 content = item.getString (); // 형식 요소 이름, 해당 데이터 //item.getString("utf-8 "); 인코딩 System.out.println (FieldName + "" + Content)을 지정합니다. } // 파일 업로드 (파일 스트림) ---> 업로드 디렉토리에 업로드 {// 일반 텍스트 데이터 문자열 필드 이름 = item.getFieldName (); // 형식 요소 이름 문자열 이름 = item.getName (); // 파일 이름 문자열 content = item.getString (); // 형식 요소 이름, 해당 데이터 문자열 유형 = item.getContentType (); // 파일 유형 inputStream in = item.getInputStream (); // 파일 스트림 업로드/** 4. 파일 이름은 다른 사용자의 경우 readme.txt 파일에 대한 이름 바꾸기*입니다. 덮어 쓰기를 원하지 않습니다! * 배경 처리 : 사용자에게 고유 한 태그를 추가하십시오! */ // a. 고유 한 태그 문자열 id = uuid.randomuuid (). toString (); // b. 파일 이름 = id + "#" + 이름을 가진 스플 라이스 이름; // 업로드 기본 경로를 가져옵니다. String 경로 = GetServletContext (). getRealPath ( "/Upload"); // 대상 파일 생성 파일 파일 = 새 파일 (경로, 이름); // 도구 클래스, 파일 업로드 item.write (파일); item.delete (); // System.out.println ()에서 생성 된 임시 파일을 삭제합니다. }}} else {system.out.println ( "현재 양식은 파일 업로드 양식이 아니며 처리 실패!"); }} catch (예외 e) {e.printstacktrace (); }} // 프로세스의 수동 구현 개인 무효 업로드 (httpservletrequest 요청)는 ioexception, unsupportedencodingexception { /* request.getParameter ( ""); // get/post request.getQueryString (); // get request.getInputStream ()에 의해 제출 된 데이터를 가져옵니다. // post*//********************에서 제출 한 데이터를 가져옵니다. 수동으로 파일 업로드 양식 데이터를 얻습니다 ************* // // 1. 폼 데이터 스트림 입력 스트림 in = request.getInputStream (); // 2. 스트림 inputStreamReader instream을 변환 = 새로운 입력 스트림 리더 (in, "utf-8"); // 3. BufferedReader Reader = New BufferedReader (Instream); // 출력 데이터 문자열 st = null; while ((str = reader.readline ())! = null) {system.out.println (str); } // 출력 데이터 문자열 st = null; while ((str = reader.readline ())! = null) {system.out.println (str); } // 닫기 reader.close (); instream.close (); 넣다(); } public void dopost (httpservletRequest 요청, httpservletResponse 응답) servletexception, ioexception {this.doget (요청, 응답); }}사례:
index.jsp
<body> <a href = "$ {pagecontext.request.contextpath} /upload.jsp"> 파일 업로드 </a> <a href = "$ {pagecontext.request.contextpath}/fileservlet? downlist"> 파일 다운로드 </a> </body>upload.jsp
<body> <form name = "frm_test"action = "$ {pagecontext.request.contextpath}/fileservlet? method = upload"method = "post"encmype = "multipart/form-data"> <%-<입력 유형 = "hidden"name = "method" "upload">-%> username : <input type = "텍스트". 파일 : <입력 유형 = "파일"이름 = "file_img"> <br/> <input type = "제출"value = "제출"> </form> </body>fileservlet.java
/** * 파일 업로드 처리 및 다운로드 * @Author jie.yuan * */public class fileservlet는 httpservlet {public void doget (httpservletrequest request, httpservletResponse 응답) servletexception, ioexception {// 다른 운영 유형 GET STRINGSHERE PARISHISH ( "method"); if ( "업로드".equals (method)) {// 업로드 업로드 (요청, 응답); } else if ( "downlist".equals (method)) {// 다운로드 목록 다운 목록을 입력합니다 (요청, 응답); } else if ( "down".equals (method)) {// 다운로드 다운 (요청, 응답); }} / ** * 1. 업로드 * / 개인 void 업로드 (httpservletrequest 요청, httpservletrepsonse 응답) servletexception, ioexception {// 1. Factory Object FileItemfactory factory = new diskfileitemfactory (); // 2. 파일 업로드 핵심 도구 클래스 ServletFileUpload 업로드 = 새로운 ServletFileUpload (Factory); // 세트 크기 제한 매개 변수 업로드를 설정합니다 .SetFilesizEmax (10*1024*1024); // 단일 파일 크기 제한 UPLOAD.SETSIZEMAX (50*1024*1024); // 총 파일 크기 제한 업로드 .SetHeAderEncoding ( "UTF-8"); // 중국어 파일 인코딩 처리 // if (upload.ismultipartContent (request)) {// 3. 요청 데이터 변환 수집 목록으로 변환 <fileItem> list = upload.parserequest (request); // traversal for (fileItem item : list) {// judgement : 정상 텍스트 데이터 if (item.isformfield ()) {// 이름을 얻습니다. // 값을 얻습니다. String value = item.getString (); System.out.println (값); } // 파일 양식 항목 else { / ************ 파일 업로드 *************** / // a. 파일 이름 문자열 이름 = item.getName (); // --- 파일 이름 업로드 문제를 처리하여 중복 이름 ---- // a1. 고유 한 마크 문자열 id = uuid.randomuuid (). toString (); // a2. 스플 라이스 파일 이름 이름 = id + "#" + 이름; // b. 업로드 디렉토리 문자열 basepath = getServletContext (). getRealPath ( "/Upload")를 가져옵니다. // c. 업로드 할 파일 객체를 작성 파일 = 새 파일 (basepath, name); // d. 업로드 item.write (파일); item.delete (); // 구성 요소가 실행될 때 생성 된 임시 파일을 삭제합니다}}}}} catch (예외 e) {e.printstacktrace (); }} / *** 2. 다운로드 목록을 입력하십시오* / private void downlist (httpservletrequest request, httpservletResponse 응답)는 servletexception, ioexception {// 구현 아이디어 : 먼저 업로드 디렉토리에서 모든 파일의 파일 이름을 얻습니다. down.jsp 목록으로 이동하여 // 1을 표시하십시오. 맵 수집 맵을 초기화하십시오. <고유 한 태그, 짧은 파일 이름을 포함하는 파일 이름>; map <string, String> filenames = new Hashmap <String, String> (); // 2. string bathpath = getServletContext (). getRealPath ( "/upload")에서 업로드 디렉토리와 파일 이름을 가져옵니다. // 디렉토리 파일 파일 = 새 파일 (bathpath); // 디렉토리의 모든 파일 이름 문자열 list [] = file.list (); // traversal, if (list! = null && list.length> 0) {for (int i = 0; i <list.length; i ++) {// full name string filename = list [i]; // 짧은 이름 string shortName = filename.substring (filename.lastIndexof ( "#")+1); // filenames.put (filename, shortname); }} // 3. 요청 도메인 요청을 저장합니다. // 4. FORFORD request.getRequestDispatcher ( "/downlist.jsp"). forward (요청, 응답); } / *** 3. 핸들 핸들 다운로드* / private void down (httpservletrequest 요청, httpservletresponse 응답)이 servletexception, ioexception {// 사용자가 다운로드 한 파일 이름을 가져옵니다 (URL 주소 후에 데이터가 추가, get) 문자열 filename = request.getParameter ( "filename"); filename = new String (filename.getBytes ( "iso8859-1"), "UTF-8"); // 업로드 디렉토리 경로를 가져옵니다. string basepath = getServletContext (). getRealPath ( "/upload"); // 파일 스트림을 가져옵니다. inputStream in = new FileInputStream (새 파일 (BasePath, filename)); // 파일 이름이 중국인 인 경우 URL 인코딩을 수행해야합니다. filename = urlencoder.encode (filename, "utf-8"); // 다운로드 응답을 위해 응답 헤더를 설정합니다 .SetHeader ( "Content-Disposition", "첨부 파일; filename =" + filename); // 응답 받기 바이트 스트림 outputStream out = response.getOutputStream (); 바이트 [] B = 새로운 바이트 [1024]; int len = -1; while ((len = in.read (b))! = -1) {out.write (b, 0, len); } // close.close (); 넣다(); } public void dopost (httpservletRequest 요청, httpservletResponse 응답) servletexception, ioexception {this.doget (요청, 응답); }}위의 내용은이 기사에 관한 모든 것입니다. 모든 사람의 학습에 도움이되기를 바랍니다.