jsp 頁面代碼:
<body> <form action="UploadServlet" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="name"> <br/> 性別:<input type="text" name="sex"> <br/> 性別:<input type="text" name="sex"> <br/> 附件:<input type="file" name="attachment"> <br/> <input type="submit" value="提交"> </form> </body>
servlet 代碼:
package cn.com.coolzsc.view;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;
import org.apache.commons.io.FilenameUtils;
public class UploadServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("name");
String sex = request.getParameter("sex");
long start = System.currentTimeMillis();
try {
//首先,判斷是否multipart編碼類型
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter = upload.getItemIterator(request);
while(iter.hasNext()){
FileItemStream item = iter.next();
//得到表單域的名稱
String name = item.getFieldName();
//得到表單域的值(這是一個輸入流)
InputStream stream = item.openStream();
//如果是普通表單域
if(item.isFormField()){
String value = Streams.asString(stream,request.getCharacterEncoding());
System.out.println(name+"="+value);
}else{ //如果是文件
if(stream.available() != 0){//如果文件域沒有選擇文件,則忽略處理
String filename = item.getName(); //得到上傳的文件名稱
if(filename != null){
//因爲在IE下面,上傳的文件還包含有此文件在客戶端機器的路徑
//所以,要把這個路徑去掉,只取文件名
filename = FilenameUtils.getName(filename);
}
System.out.println(name+"="+filename);
//將上傳文件的輸入流輸出到磁盤的文件上
Streams.copy(stream, new FileOutputStream("d:/"+filename), true);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}
}
需要的 jar 包:
commons-fileupload-1.2.2.jar commons-io-2.0.1.jar