1. 程式人生 > >Servlet3.0上傳文件

Servlet3.0上傳文件

bstr exists utf-8 lose esc pat har type 不存在

 1 package com.itheima.upload;
 2 
 3 import java.io.File;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 import java.io.OutputStream;
 8 
 9 import javax.servlet.ServletException;
10 import javax.servlet.annotation.MultipartConfig;
11 import javax.servlet.annotation.WebServlet;
12 import javax.servlet.http.HttpServlet; 13 import javax.servlet.http.HttpServletRequest; 14 import javax.servlet.http.HttpServletResponse; 15 import javax.servlet.http.Part; 16 17 import com.itheima.utils.UUIDUtils; 18 import com.itheima.utils.UploadUtils; 19 /** 20 * 文件上傳的Servlet 21 * 表單項:分為兩類 一類是文件表單項 一類是非文件表單項(普通表單項,不必設置enctype="mutipart/form-data")
22 */ 23 @MultipartConfig 24 @WebServlet("/UploadServlet") 25 public class UploadServlet extends HttpServlet { 26 private static final long serialVersionUID = 1L; 27 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 28 //
接受普通數據 非文件表單項 即普通表單項 不必設置enctype="multipart/form-data" 29 request.setCharacterEncoding("UTF-8"); 30 String filedesc = request.getParameter("filedesc"); 31 System.out.println("文件描述:"+filedesc); 32 //接受文件 文件表單項 必須滿足三要素 post form enctype="multipart/form-data" 33 //通過表單file控件(<input type="file" name="upload">)的名字屬性直接獲取Part對象 34 Part part = request.getPart("upload"); 35 //獲得文件大小 36 long size = part.getSize(); 37 System.out.println("文件的大小為:"+size); 38 String name = part.getName(); 39 System.out.println("文件上傳表單的name屬性的值為:"+name); 40 //獲取頭信息 41 String header = part.getHeader("Content-Disposition"); 42 System.out.println(header); 43 //獲取文件名字 \"為轉義 44 int lastIndexOf = header.lastIndexOf("filename=\""); 45 String filename = header.substring(lastIndexOf+10, header.length()-1); 46 System.out.println("文件名稱:"+filename); 47 //獲得文件內容 48 InputStream ips = part.getInputStream(); 49 //獲取要上傳到的文件夾路徑 50 String realPath = this.getServletContext().getRealPath("/upload"); 51 System.out.println(realPath); 52 //獲得唯一文件名 53 String uniname = UUIDUtils.getUUIDFileName(filename); 54 //獲得新的上傳路徑 55 String fenglipath = realPath + UploadUtils.getPath(uniname); 56 System.out.println(fenglipath); 57 //創建上傳路徑的file對象 58 File file = new File(fenglipath); 59 //如果上傳路徑不存在,就創建 60 if(!file.exists()){ 61 file.mkdirs(); 62 } 63 //創建字節輸出流,參數為"路徑+文件名" 64 OutputStream ops = new FileOutputStream(fenglipath+"/"+uniname); 65 //io流讀寫 66 byte [] bytes = new byte [1024]; 67 int len; 68 while((len=ips.read(bytes))!=-1){ 69 ops.write(bytes, 0, len); 70 } 71 //關流 72 ips.close(); 73 ops.close(); 74 75 76 } 77 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 78 doGet(request, response); 79 } 80 81 }

Servlet3.0上傳文件