jar包:
commons-fileupload-1.1.jar
commons-io-1.3.2.jar
demo.html頁面:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>File upload</title>
</head>
<body>
<form name="myform" action="fileupload" method="post" enctype="multipart/form-data">
名字:
<input type="text" name="name"><br>
File1:
<input type="file" name="myfile"><br>
<br>
<input type="submit" name="submit" value="Commit">
</form>
</body>
</html>
web.xml配置
<!-- 圖片上傳 -->
<servlet>
<servlet-name>Upload</servlet-name>
<servlet-class>com.rongda.photo.Upload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Upload</servlet-name>
<url-pattern>/fileupload</url-pattern>
</servlet-mapping>
servlet代碼:
package com.rongda.photo;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.rongda.vo.PhotoInfo;
@SuppressWarnings("serial")
public class Upload extends HttpServlet {
private String uploadPath = "E:\\upload"; // 上傳文件的目錄
@SuppressWarnings("unchecked")
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
PhotoInfoDao photoInfoDao = new PhotoInfoDao();
// 獲得當前時間
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, 0);
String currentTime = sdf.format(calendar.getTime());
//判斷是否上傳文件表單,也就是form中是否有enctype="multipart/form-data"項;必須post提交,get提交對內容長度有限制
if(ServletFileUpload.isMultipartContent(request)){
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096); // 設置緩衝區大小,這裏是4kb
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);// 得到所有的文件
Iterator iter = items.iterator();
PhotoInfo photoInfo = new PhotoInfo();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()){
// 處理普通表單域
String name = item.getFieldName();
if("name".equals(name)){
String value = item.getString("GBK");
if(null != value && !"".equals(value)){
photoInfo.setName(value);
}
}
} else {
String fileName = item.getName();
if (fileName != null) {
File fullFile = new File(item.getName());
if(!fullFile.getName().endsWith(".jpg") && !fullFile.getName().endsWith(".gif")){
out.print("<script>alert('只能上傳jpg或gif圖片格式!');");
out.print("window.location.href='http://www.baidu.com/';</script>");
return;
}
File savedFile = null;
if(fullFile.getName().endsWith(".jpg")){
savedFile = new File(uploadPath, photoInfo.getPhone()+".jpg");
photoInfo.setPhotoName(photoInfo.getPhone()+".jpg");
}
if(fullFile.getName().endsWith(".gif")){
savedFile = new File(uploadPath, photoInfo.getPhone()+".gif");
photoInfo.setPhotoName(photoInfo.getPhone()+".gif");
}
item.write(savedFile);
}
}
}
photoInfoDao.save(photoInfo,currentTime);
out.print("<script>alert('上傳成功!');");
out.print("window.location.href='http://www.baidu.com/';</script>");
return;
} catch (Exception e) {
// 可以跳轉出錯頁面
e.printStackTrace();
}
}else{
throw new RuntimeException("請設置form表單的enctype屬性");
}
}
public void init() throws ServletException {
File uploadFile = new File(uploadPath);
if (!uploadFile.exists()) {
uploadFile.mkdirs();
}
}
}