javaweb 파일 업로드 및 다운로드 기능 구현

본 논문 의 사례 는 자바 웹 파일 의 업로드 와 다운 로드 를 공유 하 였 으 며,여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
파일 업로드
웹 개발 의 업로드 기능 을 실현 하려 면 보통 두 단계 작업 이 필요 합 니 다.하 나 는 웹 페이지 에 업로드 입력 항목 을 추가 하 는 것 입 니 다.둘 째 는 Servlet 에서 업로드 한 파일 의 데 이 터 를 읽 고 로 컬 하 드 디스크 에 저장 하 는 것 입 니 다.
업로드 의 대부분 상황 은 폼 형식 으로 서버 에 제출 하고 사용<input type="file"> <input type="file">라벨 을 사용 하려 면 다음 과 같은 두 가 지 를 주의해 야 합 니 다.
1.name속성 을 설정 해 야 합 니 다.그렇지 않 으 면 브 라 우 저가 파일 을 업로드 하 는 데 이 터 를 보 내지 않 습 니 다.
2.method속성 을post,ectype속성 으로“multipart/form-data”유형 으로 설정 해 야 합 니 다.
Servlet 에서 업로드 데 이 터 를 직접 읽 고 해당 파일 데 이 터 를 분석 하 는 것 은 매우 번 거 로 운 작업 이기 때문이다.업로드 데 이 터 를 편리 하 게 처리 하기 위해 아파 치 조직 은 오픈 소스 구성 요소 인 Commons-FileUpload 를 제공 했다.이 구성 요 소 는“multipart/form-data”형식 이 요청 한 각종 폼 도 메 인 을 분석 하고 하나 이상 의 파일 업로드 도 가능 하 며 업로드 파일 의 크기 등 내용 도 제한 할 수 있 습 니 다.그 성능 은 매우 우수 하여 사용 이 매우 간단 하 다.
그럼 실례 를 살 펴 보 겠 습 니 다.
우선,웹 프로젝트 를 만 들 고 소스 구성 요소 Commons-FileUpload 의 jar 패키지 두 개 를 가 져 옵 니 다.comons-fileupload-1.3.3.jar,comons-io-2.6.jar.
링크:다운로드 하 다.
업로드 페이지 업로드.html 만 들 기:

<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <title>    </title>
</head>
<body>
<!--   enctype      multipart/form-data-->
<form action="UploadServlet" method="post" enctype="multipart/form-data">
 <table width="600">
 <tr>
 <td>   </td>
 <td><input type="text" name="name"/></td>
 </tr>
 <tr>
 <td>    </td>
 <td><input type="file" name="myfile"/></td>
 </tr>
 <tr>
 <!--           。-->
 <td colspan="2"><input type="submit" value="  "/></td>
 </tr>
 </table>
 
</form>
</body>
</html>
Servlet 만 들 기:

package cn.itcast.fileupload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;
import java.util.UUID;
/**
 * Created by lc on 2018/8/24.
 */
@WebServlet(name = "UploadServlet",urlPatterns = "/UploadServlet")
public class UploadSevlet extends HttpServlet {
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 doGet(request,response);
 }
 
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 try{
 response.setContentType("text/html;charset=utf-8");
//   DiskFileItemFactory    
 DiskFileItemFactory factory=new DiskFileItemFactory();
//         ,              
 File f=new File("S:\\TempFolder");
 if (!f.exists()){
 f.mkdirs();
 }
 factory.setRepository(f);
//   ServletFileUpload  
 ServletFileUpload fileUpload=new ServletFileUpload(factory);
//       
 fileUpload.setHeaderEncoding("utf-8");
//   request, form          FileItem  
 List<FileItem> fileItems = fileUpload.parseRequest(request);
//      
 PrintWriter writer=response.getWriter();
//   List  
 for (FileItem fileItem:fileItems) {
//          
 if (fileItem.isFormField()){
//       
 String name = fileItem.getFieldName();
 if(name.equals("name")){
//         
 if (!fileItem.getString().equals("")){
 String value=fileItem.getString("utf-8");
 writer.print("   :"+value+"<br />");
 }
 }
 }
 else {
 //        
 String filename=fileItem.getName();
//       
 if(filename!=null&&filename!=""){
 writer.print("        :"+filename+"<br />");
//        
 filename= UUID.randomUUID().toString()+"_"+filename;
 String webpath="/upload/";
//       
 String filepath=getServletContext().getRealPath(webpath+filename);
 //  File  
 File file=new File(filepath);
 //     
 file.getParentFile().mkdirs();
 //    
 file.createNewFile();
 //       
 InputStream in=fileItem.getInputStream();
//    FileOutputStream           
 FileOutputStream out=new FileOutputStream(file);
//     
 byte[] bytes=new byte[1024];//        
 int len;
//            ,                   
 while ((len=in.read(bytes))>0)
 out.write(bytes,0,len);
 in.close();
 out.close();
 fileItem.delete();
 writer.print("      !");
 }
 }
 
 
 }
 }catch (Exception e){
 throw new RuntimeException(e);
 }
 }
}
캡 처 실행:



이로써 파일 업로드 기능 은 이미 실현 되 었 다.이때 프로젝트 발표 디 렉 터 리 에 들 어가 면 업 로드 된 파일 을 볼 수 있 습 니 다.다음 그림:

파일 다운로드
1.다운로드 페이지 download.html 만 들 기

<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <title>    </title>
</head>
<body>
<a href="/Download?filename=1.jpg" rel="external nofollow" >    </a>
</body>
</html>
2.Servlet 만 들 기

package cn.itcast.fileupload;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
 * Created by lc on 2018/8/24.
 */
@WebServlet(name = "DownloadServlet",urlPatterns = "/Download")
public class DownloadServlet extends HttpServlet {
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 doGet(request,response);
 }
 
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 response.setContentType("text/html;charset=utf-8");
 //     
 String filename = request.getParameter("filename");
 //        
 String folder="/download/";
 //             
 response.addHeader("Content-Type","application/octet-stream");
 response.addHeader("Content-Disposition","attachment;filename="+filename);
 //           
 InputStream in=getServletContext().getResourceAsStream(folder+filename);
 OutputStream out=response.getOutputStream();
 byte[] bytes=new byte[1024];
 int len=0;
 while ((len=in.read(bytes))!=-1){
 out.write(bytes,0,len);
 }
 }
}
3.프로젝트 발표 디 렉 터 리 에 download 폴 더 를 만 들 고 폴 더 에 1.jpg 라 는 파일 을 설치 합 니 다.
다음 그림:


캡 처 실행:


이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기