笔记:上传图片

笔记:上传图片

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);
		}

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值