먼저 관련 기술을 소개하겠습니다.
서비스 방법의 두 가지 중요한 매개 변수.
ServletRequest는이를 사용하여 사용자 요청을받으며 기능은 다음과 같습니다.
하위 인터페이스 중 하나 인 javax.servlet.http.httpservletrequest
ServletResponse는 사용자에게 데이터를 반환하는 데 사용됩니다.
하위 인터페이스 중 하나 인 javax.servlet.http.httpservletresponse
파일 다운로드 기술 :
파일 다운로드 기술은 파일 업로드 기술이 비교적 간단합니다. 예를 들어 사진 다운로드를 봅시다.
먼저 사진을 찾아서 다운로드하십시오
1. 프론트 엔드 코드 :
<span style = "font-size : 14px;"> <a href = "img"> 폴더 아래의 모든 그림을 찾으십시오 </a> <br/> </span>
프론트 데스크는 단 하나의 문장으로 만 수행 할 수 있습니다. Web.xml을 통해 배경 프로그램을 직접 검색하십시오
2. 배경 디스플레이 코드 :
<span style = "font-size : 14px;"> public class showimg 확장 httpservlet {public void doget (httpservletrequest request, httpservletreponse responsk) t servletexception, ioexception {<span style = "화이트 스페이스 : pre"> </span> dopost (요청, 응답); // 예외를 방지하기 위해, doget 및 dopost를 함께 연결하기 위해} </span> <span style = "font-size : 14px;"> public void dopost (httpservletrequest 요청, htt pservletresponse 응답) servletexception, IoException {request.setcharacterencoding ( "utf-8"); "텍스트/html; charset = utf-8"); "> <span style ="font-size : 14px; "> // <span style ="white space : pre "> </span> ServletContext를 호출하십시오. 물론 직접 호출 할 수도 있습니다. 사진이 사용될 때 파일의 절대 경로가 필요합니다 </span> 파일에 대한 절대 경로가 필요합니다. servletcontext context = getServletContext (); String Path = context.getRealPath ( "/imgs"); // 폴더 파일의 절대 경로를 찾으십시오. "> // <span style ="white space : pre "> </span> 폴더를 찾은 후 사용자가 문자열 파일을 탐색 할 수 있도록 모든 이미지를 나열하십시오 [] = file.list (); for (string fn : files) {</span> <pre name = "code"> <span style = "font-size : 14px;"> // 모든 표시 </span> 문자열 img = "<img src = 'imgs/"+fn+"'/>";
// out.print ( "<a href = imgs/'"+fn+"'> 다운로드 사진 </a>"); String str = "<a href = 'down? name = imgs/"+fn+"'> 사진 다운로드 </a> "; // 다운로드 할 하이퍼 링크를 제공하고 매개 변수를 전달합니다 --- 파일 이름을 사용자 링크 컨텐츠로 전송하고 rit.print (str); out.print (img+"<br/ > ");}}
3. 특정 파일 다운로드
먼저 해당 프로토콜을 설정해야합니다. 다운로드 프로토콜에는 해당 다운로드 헤더를 설정해야합니다
<span style = "white space : pre"> </span> <span style = "font-size : 18px;"> <strong> response.setContentType ( "Application/Force-Download"</strong>);/ /해당 헤더를 설정 </span>
다운로드 할 때는 현재 사진의 파일 이름을 표시해야합니다.
<span style = "font-size : 18px;"> <span style = "흰색 공간 : pre"> </span> outputStream out = response.getOutputStream (); // 출력 스트림 문자열 이름 = reque st. getParameter ( "name"); // 클라이언트 서비스에서 전달 된 매개 변수 이름은 int num = lastindexof ( "/"); "utf-8"); // 중국어가 다시 요약 해야하는 경우 // system.out.println (aa); "content-disposition", <span style = "color :#ff0000;"<< Strong> Attachment; Filename </strong> </span> = ' "+aa+"' "); // 저장시 사용자 이름의 다운로드를 용이하게하기 위해 파일 이름을 전송합니다 </span>
특정 다운로드를 만드십시오
<span style = "font-size : 18px;"> String filename = this.getServletContext (). getRealPath (이름); // 절대 경로를 가져 와서 파일 이름을 전달하고 동시에 절대 경로를 전달합니다. inputStream에서 inputStream을 읽을 수 있습니다. {out.write (b, 0, len) </span> 생식 이미지 :
클릭 후 렌더링 :
파일 이름이 다릅니다
파일 업로드 기술
파일을 직접 업로드하는 것은 매우 번거 롭기 때문에 다른 사람의 패키지를 사용하여 링크를 다운로드하고 링크 양식을 열 수 있습니다.
클라이언트는 HTTP를 보낼 때 복합 데이터 유형을 나타 내기 위해 멀티 파트/양식 데이터 유형을 사용해야합니다.
즉, <form enctype = "multipart/form-data">
<input type = "file"name = "somename"/> html 태그를 양식에서 사용하십시오.
필수 패키지 :
Commons-FileUpload.jar, 코어 파일 업로드 도구는이 패키지에 있습니다.
파일을 업로드하는 데 필요한 Commons-IO.jar 패키지
상해:
DiskFileItemFactory- 캐시 영역 크기를 나타내는 시간 모니터링 파일 디렉토리 생성
ServletfileUpload는 httpservletrequest를 구문 분석하는 데 사용됩니다. 파일 객체 세트를 반환합니다.
FileItem은 사용자가 업로드 한 각 파일 객체를 나타냅니다.
주요 과정 :
file f = 새 파일 ( "f :/ex/temp"); // 임시 파일 스토리지 위치를 지정합니다.
DiskFileItemFactory FF = 새로운 DiskFileItemFactory (1024*1024*5, F); // 임시 파일의 크기 및 저장 위치
servletfileupload sf = 새로운 servletfileupload (ff);
목록 <fileitem> list = sf.parserequest (요청); // 구문 분석 시작
for (fileitem it : list) {// 파일 이름을 얻습니다. 그리고 UUID를 사용하여 중복 이름의 문제를 해결하십시오.
fileUtils.copyInputStreamTofile (it.getInputStream (), 새 파일 (path+"/"+filename); // 지정된 폴더에서
}
1. 프론트 데스크 코드 :
<span style = "font-size : 18px;"> <h2> 파일 업로드 </h2> <form action = "upfile"method = "post"<span style = "color :#ff0000;"> EncType = "multipart /form-data "</span>> // 스테이션이 데이터를받을 수 없어야합니다. span style = "color :#ff6666;"> name </span> = "file"/> <br/> 이름을 입력하십시오 : <input type = "text"<span style = "color :#ff6666;"> 이름 </span> = "desc"/> <br/> file2 <입력 유형 = "file"<span style = "color :#ff6666;"> name </span> = "file"/> <br/> 이름을 입력하십시오 : <input type = "text"<span style = "color :#ff0000;"> name </span> = "desc"/> <br/> <입력 유형 = "제출"value = "제출 "/> </form> </span>
2. 배경 코드 :
2-1 먼저 임시 파일을 저장하기 위해 하드 디스크 기반 공장을 만듭니다.
// 임시 저장소 위치 파일 F = 새 파일 ( "f :/ex/temp"); // 임시 저장소 위치 DiskFileItemFactory ff = new DiskFileItemFactory (1024*1024*5, f); // 크기 임시 파일 및 스토리지 위치
2-2 ServletFileUpload 객체를 작성하고 파일 크기를 설정하여 파일 전송을 극대화합니다.
// 구문 분석 용 객체 생성 ServletFileUpload SF = 새로운 ServletFileUpload (FF); SETFILESIZEMAX (1024*1024*10); // 단일 스토리지 위치 만 최대 값이 10M Sf.SetSizemax (1024*102 4입니다. *20);/모든 파일의 최대 값은 20m 문자열 경로 = getServletContext ( "/imgs");
2-3 객체를 구문 분석하기 시작합니다
<span style = "white space : pre"> </span> 목록 <fileitem> list = sf.parserequest (요청); // 프론트 데스크에서 전송 된 모든 정보를 가져 오면 프론트 데스크는 EncType = "multiptar를 채워야합니다. /form- data "for (fileitem it : list) {it0 = it; // <span style ="white-space : pre "> </span> 일반 양식 객체 인 경우 (if)를 직접 판단 할 수 있습니다. It.isformfield ()) {// type = 텍스트 이름 값 문자열 이름 = it.getString ( "UTF-8")과 같은 일반 양식 항목입니다. +name); // writed}의 이름 아래} else {<span style = "white space : pre"> </span> // 이것은 프론트 데스크 문자열 이름으로 선택한 파일 이름 = it.getname입니다. (); // 특정 파일 경로--absolute 경로 // string str = it.getString (); // system.out.println ( "str"+str); .getContentType (); getSiz e (); <pre name = "code"style = "font- size : 18px;"> // <span style = "white-space : pre"> </span> 서버 측의 리소스 파일 이름은 중국어로 될 수 없습니다. 브라우저는 자동으로 인코딩합니다 --------------------------------------------------- --------------------------------------------------------- --------------------------------------------------------- --------------------------------------------------------- ----------- 업로드 된 파일 이름은 중국어 스토리지없이 이름으로 변환되어 사용자가 원본 이름을 복원 할 수 있도록 원래 파일 이름과 해당 관계가 있습니다. 매핑 이름을 저장 한 다음 사용자가 다운로드 할 때 다시 변환해야합니다. // 맵 이름 문자열 id = uuid.randomuuid (). tostring (). replace ( "-", ""); // 세계의 유일한 uuid는 // 파일 이름 string lastname = name.substring (name)에 사용됩니다. lastIndexof ( "."); // 파일 형식 // 이름 파일 형식은 모두 발견됩니다. 해당 위치 FileUtils.copyInputStreamTofile (it.getInputStream (), 새 파일 (path+"/"+filename)에 쓸 수 있도록하십시오. // 경로는 스토리지의 절대 경로입니다-이전}}
이것은 간단한 업로드를 달성 할 수 있지만 이런 종류의 업로드는 전혀 안전하지 않습니다. 전체 코드는 일반적인 문제를 방지하기 위해 사소한 문제로 첨부됩니다.
파일을 선택한 후
웹 서버 IMG에서 파일을 확인하면 파일이 "UUID에 의해 생성 된 파일 이름"페이지에 업로드되었습니다.
파일 업로드 소스 코드 :
<font-size : 14px; " java.util.uuid; .commons.fileupload.fileitem; apache.commons .io.fileutils; public class myupfile은 httpservlet {<span style = "white-space : pre;"> </span> // 사용자 열에서 주소를 입력하지 못하게합니다. 응답 없음 <span style = "white space : pre;"> </span> @override <span style = "white-space : pre;"> </span> 보호 된 void doget (httpservletrequest req, http servletresponse resp) < span style = "white-space : pre;"> </span> servletexception, ioexception {<span style = "white-space : pre;"> </span> resp.setContentType ( "UTF-8"); span style = "화이트 공간 : pre;"> </span> Writer wr = resp.getwriter (); 지원되는 아직 업로드 메소드 "); <span style ="화이트 공간 : pre; "> </span>} <span style ="흰색 공간 : pre; "> </span span style ="화이트 스페이스 : pre; "> </span> public void dopost (httpservletrequest request, httpservletreponse 응답) <span style ="white space : pre; "> </span> servletexception, ioexception {<span style ="화이트 스페이스 : pre; "> </span> request.setcharacterencoding ("utf-8 "); <span style ="화이트 공간 : pre; "> </span> response.setContentType ("text/html; charset = utf- 8 "); <span style ="white space : pre; "> </span> printwriter out = respons.getwriter (); <span style ="화이트 공간 : pre; "> </span> // 정상 양식 업로드 방법 1 : <span style = "white style : pre;"> </span> // return value get (null) post1 (apllication/x-form-urlencoded, normal form) post2 (파일 : multipart/ 양식-데이터, 파일 업로드 양식) // <span style = "white-space : pre;"> </span> string type = request.getContentType (); > </span>if(! 틸리피. 일반 형태 2 "); // <span style ="화이트 공간 : pre; "> </span> return; // <span style ="화이트-공간 : pre; "> </span>} <span Style = "White;"> </span> // 메소드 2 <span style = "white-space : pre;"> </span> boolean boo = servletfileupload.ismultipartContent (요청); "화이트 스페이스 : pre;"> </span> if (boo == false) {<span style = "white space : pre;"> </span> out.print ( "일반 양식의 1 업로드가 아닙니다. 지원 "); <span style ="white-space : pre; "> </span> <span style ="흰색 공간 : pre; "> </span>} <span style ="화이트 공간 : pre; "> </span>} span> <span style ="white-space : pre; "> </span> // 임시 저장소 지정 <span style ="white-space : pre; "> </span> 파일 f = 새 파일 ( "f :/ex/temp"); // 임시 파일 스토리지 위치를 지정 <span style = "흰색 공간 : pre;"> </span> diskfileitemfactory ff = new DiskFileItemFactory (1024*1024* 5, f); // 임시 파일 크기 및 스토리지 위치 <span style = "흰색 공간 : pre;"> </span> <span style = "화이트 공간 : pre;"> </span> // 생성 구문 분석 <span style = "white-space : pre;"> </span> servletfileupload sf = new servletfileupload (ff); (1024*1024*10); // 단일 스토리지 위치의 최대 값은 10m <span style = "흰색 공간 : pre;"> </span> sf.setsizemax (1024*1024*20);/입니다. /모든 파일의 최대 값은 20m <span style = "white-space : pre;"> </span> string path = this.getServletContext ( "/imgs"); 공간 : pre; "> </span> system.out.println ("스토리지 경로 : "+path); <span style ="white space : pre; "> </span> // 구문 분석 <span style =. "White-space : pre;"> </span> fileItem It0 = null; "화이트 공간 : pre;"> </span> 목록 <FileItem> list = sf.parserequest (요청); // 프론트 데스크에서 전송 된 모든 정보를 가져 오면 프론트 데스크는 EncType = "multipart/form-를 작성해야합니다. 데이터 "<span style ="white- space : pre; "> </span> for (fileitem it : list) {<span style ="화이트 스페이스 : pre; "> </span> it0 = it; <span Style = "White-space : pre;"> </span> if (it.isformfield ()) {// 이름의 텍스트 값 <span style = "화이트 공간 : pre와 같은 일반 양식 항목입니다. ; "> </span> string name = it.getString ("utf-8 "); <span style ="화이트 공간 : pre; "> </span> system.out.println ("기본 양식 항목 이름 : "+name); // 설명의 이름 아래에 쓴 설명은 <span style ="white-space : pre; "> </span>} else {<span style ="white-space : pre; "> </</ span> string name = it.getName ();//특정 파일 경로 // <span style = "pre;"> </span string n1 = it.getFieldName (); "White-space : pre;"> </span> string str = it.getString (); // 파일의 내용 // <span style = "white-space : pre;"> </span> system. out.println ( "str"+str); /<span style = pre; "> < /span> system.out.println ("+n1); -space : pre; "> </span> 문자열 contenttype = it.getContentType (); <span style ="white-space : pre; "> </span> long size = it.getSize (); <span style = "White-space : pre;"> </span> // 파일이 비어있는 <span style = "white-space : pre;"> </span> if (size == 0) {<span style = "에서 파일을 방지합니다. 흰색 공간 : pre; "> </span> 계속; // 파일이 비어 있고 직접 반환; <span style ="white-space : pre; "> </span>} <span style ="white-space : pre; "> </span> // 사용자 이름. <span style = "white-space : pre;"> </span> if (name == null || name.trim () == "") {<span style = "white-space : pre pre를 작성해야합니다. ; ">"> </span> 계속; <span style = "white-space : pre;"> </span>} <span style = "white-space : pre;"> </span> // <span style = "화이트 공간 : pre;"> </span> system.out.println (name+","+contenttype+","+size); / 서버 측의 리소스 파일 이름은 중국어로 될 수 없으며 브라우저는 자동으로 인코딩됩니다 ----------------------------- --------------------------------------------------------- --------------------------------------------------------- --------------------------------------------------------- --------------------------------------------------------- ------> </span> // 사용자가 다운로드 할 때 원래 이름을 복원 할 수 있도록 원본 이름과 매핑 이름 사이의 서신을 저장하고 사용자가 다운로드 할 때 다시 변환해야합니다. pre; "> </span> // 매핑 이름 <span style ="white-space : pre; "> </span> string id = uuid.randomuuid (). toString (). replace ("-"," ); <span style = "흰색 공간 : pre;"> </span> // 파일 이름 <span style = "pre;"> </span> string lastname = name.substring (name.lastIndexof ( "."); <span style = "white-space : pre;"> </span> // 이름 파일 형식이 모두 발견됩니다. </span> string filename = id+lastname; 해당 위치 <span style = "white-space : pre;"> </span> fileUtils.copyInputStreamTofile (it.getInputStream (), 새 파일 (path+"/"+filename);} <span style에 쓸 수 있도록하십시오. = "화이트 공간 : pre;"> </span>}} catch (fileUploadexception e) {<span style = "화이트 스페이스 : pre;"> </span> 새 runtimeexception ( "파일 업로드 구문 분석 오류". + e); <<<white style = "white space : pre;"> </span>} 마침내 {<span style = "화이트 공간 : pre;"> </span> if (it0 == null) {< span style = "white-space : pre;"> "> </span> it0.delete (); // 임시 파일 <span style ="white-space : pre; "> </span>}} out.close ( );}}} </span> <span style = "font-size : 18px;"> </span> 파일 다운로드 소스 코드 : [html] VelaCopyPrint보기? <span style = "font-size : 14px;"> 패키지 CN servlet.servax.httpservlet. htttp.httpservletrequest; letresponse 응답) 던지기 servletexcepti on, ioexception {dopost (request, response)} public void dopost (httpservletrequest response)는 servletexception, ioexception tion {// setcontenttype ( "Application/force-donge"; 사용자 이름을 프론트 데스크로 보내기/*고정 사용자 이름 문자열 aa = "1.jpg"; // 중국어 인 경우 aa = urlencoder.encode (aa, "utf-8")를 인코딩해야합니다. response.setheader ( "content-disposition", "attachment; filename = '"+aa+"'"); //// "첨부 파일;"를 추가해야합니다. 그렇지 않으면 브라우징*/outputStream out = 응답이됩니다. getoutputStream (); // getParameter ( "name")를 가져옵니다. 서브 스트링 (num+1); 처분 ","첨부 파일; filename = ' "+aa+"' "); // String filename = this.getServletContext (). getRealPath (name); // 저장할 때 다운로드 할 수 있도록 파일 이름을 전달할 수 있도록 파일 이름을 가져옵니다. New FileInputStream (filename)을 얻으십시오 [] byte [1024]; 쓰기 (b, 0, len);}}} </span> <span style = "font-size : 18px;"> </span>위의 내용은이 기사에 관한 모든 것입니다. 모든 사람의 학습에 도움이되기를 바랍니다.