首先需要有一个客户端(我使用的是jsp文件)
<form action="/upload" method="post" enctype="multipart/form-data"> 用户名:<input type="text" name="username" ><br/> 密码:<input type="password" name="password"><br/> 上传:<input type="file" name="file" ><br/> <input type="submit" value="提交"><br/> <font color="red">${msg }</font> </form>服务端
import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; 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.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; @WebServlet("/upload") public class UploadServlet extends HttpServlet{ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { List<String> list = Arrays.asList("jpg","jpeg"); //检查我们是否有文件上传请求 boolean isMultipart = ServletFileUpload.isMultipartContent(req); if(isMultipart){ //为基于磁盘的文件项创建工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //创建一个新的文件上传处理程序 ServletFileUpload upload = new ServletFileUpload(factory); //解析请求 //列表/ * FileItem * /项目= upload.parseRequest(请求); //为上传设置缓存大小 如果上传文件达到50KB 就先把这50KB的缓存到硬盘上 在继续上传 factory.setSizeThreshold(1024*50);//50KB //设置可允许上传文件的大小 //设置单个文件 upload.setFileSizeMax(1024*1024);//只允许上传1M以下的文件 /*设置(一次性传一个或一个以上文件的总大小)整体上传文件 upload.setSizeMax(1024*1024);//只允许上传文件加起来不超过1M */ try { List<FileItem> parseRequest = upload.parseRequest(req); for (FileItem fileItem : parseRequest) { boolean formField = fileItem.isFormField();//判断是否是需要上传的文件 为false才是需要上传的文件 if(formField){//为true是 普通信息 //获取客户端传入的name名称 String name = fileItem.getFieldName(); //获取客户端输入的信息 防止乱码 String value = fileItem.getString("utf-8"); //后台打印客户端传入的用户名和密码 System.out.println(name+" : "+ value); }else{//为false是需要上传的文件 //System.out.println(fileItem.getName());//230803-157961928349a7.jpg //利用FilenameUtils工具包获取上传文件的后缀名 String extension = FilenameUtils.getExtension(fileItem.getName()); /** * 只允许用户上传指定后缀名的文件 * 交由list集合判断可以上传的文件后缀名 */ if(list.contains(extension)){ /** * 需求:上传的文件保存在本项目中的upload文件夹下 * 首先获取本项目的绝对路径 +拼接 */ //获取本项目的realpath String realPath = req.getServletContext().getRealPath("/"); //System.out.println(realPath);//D:\Eclipse_workspace\UpLoad\WebContent\ //利用UUID 获取随机数 允许用户重复提交相同文件 String uuid = UUID.randomUUID().toString(); String name = uuid+"."+extension; File file = new File(realPath,"/upload/"+name); //如果该文件路径不存在 需要创建 if(!file.getParentFile().exists()){//当文件路径不存在是 创建 file.getParentFile().mkdirs();//如果该文件的父级路径不存在,就创建父级路径 } //直接写入磁盘 需要一个文件路径 fileItem.write(file); }else { //若不满足指定后缀名格式的文件 转发至上传页面 req.setAttribute("msg", "文件格式不匹配"); req.getRequestDispatcher("/upload.jsp").forward(req, resp); } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }