笔记:上传图片
package com.bjsxt.servlet;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.bjsxt.entity.Student;
import com.bjsxt.service.StudentService;
import com.bjsxt.service.impl.StudentServiceImpl;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class AddServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
/**
* * item.isFormField() 普通表单项 true File表单项false
* * item.getFieldName() 表单项的name属性 name、age、score、photo
* * item.getString() 表单项的内容 普通表单项,就是value 如果是File表单项,就是文件的内容
* * item.getString(”utf-8”) 解决中文乱码问题
* * item.getName() 普通表单项 null File表单项 fileName
* * item.getContentType() 普通表单项 null File表单项 MIME类型
* * item.getSize() 内容的size
*
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// //获取数据
// String name= request.getParameter("name");
// int age=Integer.parseInt(request.getParameter("age"));
// Double score=Double.parseDouble(request.getParameter("score"));
//
//页面跳转
//1.创建一个FileItemFactory对象(生产FileItem,一个FileItem对应一个表单项)
FileItemFactory factory=new DiskFileItemFactory();
//2.创建ServletFileUpload对象(实现文件的上传)
ServletFileUpload upload=new ServletFileUpload(factory);
//3.使用ServletFileUpload对象实现上传,不仅是文件,也包括普通表单项,并封装到一个个FileItem中
List<FileItem> fileItems=null;
//完善四,限制上传文件的大小
upload.setFileSizeMax(16*1024*5);
upload.setSizeMax(19*1024);
upload.setHeaderEncoding("utf-8");//就觉文件名称中文乱码问题
try {
fileItems=upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
request.setAttribute("error","wohujuda");
request.getRequestDispatcher("/add.jsp").forward(request,response);
return;
}
String name=null;
int age=0;
double score=0;
String fileName = null;
String uuidName = null;
String contentType = null;
for(int i=0;i<fileItems.size();i++){
FileItem fileItem=fileItems.get(i);
if(fileItem.isFormField()){
String fieldName=fileItem.getFieldName();
if("name".equals(fieldName)){
name=fileItem.getString("utf-8");
}
if("age".equals(fieldName)){
age=Integer.parseInt(fileItem.getString());
}
if("score".equals(fieldName)){
score=Double.parseDouble(fileItem.getString());
}
}else{
//创建路径
//完善限制上传文件类型
contentType= fileItem.getContentType();
if(!"image/jpeg".equals(contentType) && !"image/gif".equals(contentType)){
request.setAttribute("error","只能上传GIF和JPG文件");
request.getRequestDispatcher("/add.jsp").forward(request,response);
return;
}
File dir=new File("d:/upload");
//完善一
if(!dir.exists()){
dir.mkdirs();
}
//完善二,防止重名
fileName= fileItem.getName();
String itemName=fileItem.getName();
UUID uuid=UUID.randomUUID();
uuidName = uuid.toString()+fileName.substring(fileName.lastIndexOf("."));
//
File file=new File(dir,uuidName);
//
try {
fileItem.write(file);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Student stu=new Student(name,age,score,fileName,uuidName,contentType);
//调用Biz 方法
StudentService stuBiz=new StudentServiceImpl();
int n= stuBiz.save(stu);
if(n!=0){
//重定向:/后面要跟上下文路径 /stumgr /stumgr2
response.sendRedirect(request.getContextPath()+"/servlet/ShowAllServlet");
}else{
request.setAttribute("mess", "添加失败!");
request.getRequestDispatcher("/add.jsp").forward(request, response);
}
}
}