·Servlet 檔案上傳 FileUpload
·實現以下程式碼前需要在專案中新增jar包commons-fileupload-1.2.1.jar 和其支援jar包commons-io-1.4.jar(即使用commons-fileupload-1.2.1.jar的前提是載入commons-io-1.4.jar)
package com.yinhe.upload;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
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 org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet("/upLoadServlet")
public class upLoadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//獲取上傳檔案儲存路徑
String basePath = this.getServletContext().getRealPath("/WEB-INF/upload");
System.out.println(basePath);
String message="";
//建立一個DiskFileItemFactory
DiskFileItemFactory factory = new DiskFileItemFactory();
//建立一個檔案上傳解析器
ServletFileUpload fileUpload = new ServletFileUpload(factory);
//處理中文亂碼
fileUpload.setHeaderEncoding("utf-8");
//判斷提交資料是否是上傳表單的資料
if(!ServletFileUpload.isMultipartContent(request)){
return;
}
try {
List<FileItem> list = fileUpload.parseRequest(request);
for(FileItem item:list){
//判斷表單是普通表單還是上傳表單
if(item.isFormField()){
//普通資料
String name=item.getFieldName();
System.out.println(name);
}else{
//上傳檔案
String fileName=item.getName();
if(fileName==null || fileName.trim().equals("")){
continue;
}
//獲取檔名
fileName=fileName.substring(fileName.lastIndexOf("\\")+1);
//建立一個檔案輸入流
InputStream in =item.getInputStream();
//建立一個檔案輸出流
FileOutputStream out = new FileOutputStream(basePath+"/"+fileName);
//建立一個緩衝區
byte[] buffer=new byte[1024];
int len=0;
//迴圈將輸入流讀入緩衝區當中
while((len=in.read(buffer))>0){
//使用輸出流將緩衝區的資料寫入到指定目錄
out.write(buffer, 0, len);
}
//關閉流
in.close();
out.close();
//刪除臨時 檔案
item.delete();
message="檔案上傳成功";
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
message="檔案上傳失敗";
e.printStackTrace();
}
request.setAttribute("message", message);
request.getRequestDispatcher("/message.jsp").forward(request, response);
}
}