servlet文件的上传

60 篇文章 1 订阅
9 篇文章 0 订阅

所需jar包
在这里插入图片描述
servlet实现:
将图片上传到服务器的webApp指定的目录下,再将地址保存到数据库。

package com.servlet;

import java.io.File;
import java.io.IOException;
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 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;

import com.bjsxt.entity.Student;
import com.bjsxt.service.StudentService;
import com.bjsxt.service.impl.StudentServiceImpl;

/**
 * @author Administrator
 *需要先导入commons-fileupload.jar和commons-io.jar包
 */
public class AddServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
		
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	 	//1创建FileItemFactory对象
		FileItemFactory factory=new DiskFileItemFactory();
		//2创建ServletFileUplode对象
		ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
		servletFileUpload.setHeaderEncoding("utf-8");//解决file表单项的文件名中文乱码问题
		servletFileUpload.setFileSizeMax(16*1024);//单个文件大小的上限
		servletFileUpload.setSizeMax(5*16*1024);//一次上传所有文件总大小的上限
		//3通过ServletFileUplode对象实现上传操作,将客户端一个个表单项封装到一个个FileItem中
		List<FileItem> itemlist=null;
		try{
			itemlist=servletFileUpload.parseRequest(request);
		}catch(FileUploadException e){
			e.printStackTrace();
			request.setAttribute("mess", "文件不能超过16kb");
			request.getRequestDispatcher("/add.jsp").forward(request, response);
			return;
			}
		//4便利各个FileItem(相当于对各个表单项进行处理)
		String name = null;
		int age = 0;
		double score = 0;
		String realName =null;
		String photoName = null;
		String photoType = null;
		for (int i = 0; i < itemlist.size(); i++) {
			//取出第i个表单项
			FileItem item=itemlist.get(i);
			String filedName=item.getFieldName();
			if (item.isFormField()) {
				if ("name".equals(filedName)) {
					name=item.getString("utf-8");
				}
				if ("age".equals(filedName)) {
					age=Integer.parseInt(item.getString());
				}
				if ("score".equals(filedName)) {
					score=Double.parseDouble(item.getString());
				}
			}else if("photo".equals(filedName)){
				//完善5:限制上传文件的大小 ,不应该在这写,因为程序执行到这时已经将文件放入了临时文件夹中
//				long size=item.getSize();
//				if (size>16*1024) {
//					request.setAttribute("mess", "文件不能超过16kb");
//					request.getRequestDispatcher("/add.jsp").forward(request, response);
//					return;
//				}
				//完善4:上传指定格式的文件
				String contentType=item.getContentType();
				photoType=item.getContentType();
				if (!"image/jpeg".equals(contentType) && "image/gif".equals(contentType)) {
					request.setAttribute("mess", "只能上传jpg和gif文件");
					request.getRequestDispatcher("/add.jsp").forward(request, response);
					return;
				}
				//指定上传的文件夹(tomcat的webApps目录下)当前项目下的文件夹
				String realpath=this.getServletContext().getRealPath("/upload");
				File dir=new File(realpath);
				if (!dir.exists()) {
					dir.mkdirs();
				}
				//指定上传的文件名
				realName=item.getName();
				//指定上传的文件夹和文件名
				//完善2:为了防止文件的同名覆盖,上传到服务器端的文件重新命名
				UUID uuid=UUID.randomUUID();
				String extName=realName.substring(realName.lastIndexOf("."));
				photoName=uuid.toString()+extName;
				 File file=new File(dir, photoName);
				 try {
					item.write(file);
				} catch (Exception e) {
					// TODO: handle exception
					e.printStackTrace();
				}
				
			}
			
		}
		//将获取的数据保存到对象中
		Student stu=new Student( name, age, score, realName, photoName, photoType);
		StudentService  stuService = new StudentServiceImpl();
		//执行插入
		int n = stuService.save(stu);
		    //页面跳转
		if (n != 0) {
			// 重定向:/后面要跟上下文路径 /stumgr /stumgr2
			response.sendRedirect(request.getContextPath()
					+ "/servlet/ShowAllServlet");
		} else {
			request.setAttribute("mess", "添加失败!");
			request.getRequestDispatcher("/add.jsp").forward(request, response);
		}
	
	}

}


jsp实现:上传文件的格式必须使用过enctype="multipart/form-data"类型

 <body>
   <!-- 上传文件必须使用enctype="multipart/form-data"类型 -->
     <form action="servlet/AddServlet" method="post" enctype="multipart/form-data">   		
    	用户名:<input type="text" name="name"><br>
    	年龄:<input type="text" name="age"><br>
    	分数:<input type="text" name="score"><br>      
    	文件:<input type="file" name="photo"><br>      
    	<input type="submit" value="提交">	
    </form>
    
  </body>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值