1.需要导入jar包
2.index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <!--为了利用DiskFileItemFactory实现文件上传,在html或jsp页面中,form表单中method必须设置为post,并且要设置enctype=”multipart/form-data”: --> <form action="FileServlet" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="uname"> 密码:<input type="password" name="pwd"> 文件:<input type="file" name="myfile"> <input type="submit" value="提交"> </form> </body> </html>
3.FileServlet.java servlet接收文件代码
package web; import java.io.File; import java.io.IOException; 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; /* * @WebServlet注解用于标注在一个继承了HttpServlet类之上,属于类级别的注解 * 其中/FileServlet 表示访问该servlet的 url 映射(地址)(此处为相对路径,即 "项目名称/FileServlet" ) * 该注解的作用等价于 在web.xml中配置的该servlet的<servlet-mapping>元素中<url-pattern>的配置 * */ @WebServlet("/FileServlet") public class FileServlet extends HttpServlet {// 扩展 HttpServlet 类 //serialVersionUID作用是序列化时保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性,用于版本控制 private static final long serialVersionUID = 1L; // 处理 GET 方法请求的方法 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //创建一个解析器工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //文件上传解析器 ServletFileUpload upload = new ServletFileUpload(factory); // 判断enctype属性是否为multipart/form-data boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { try { //解析请求,将表单中每个输入项封装成一个FileItem对象 List<FileItem> fileItems = upload.parseRequest(request); // 迭代表单数据 for (FileItem fileItem : fileItems) { //判断输入的类型是 普通输入项 还是文件 if (fileItem.isFormField()) { //普通输入项 ,得到input中的name属性的值,fileItem.getFieldName() 得到输入项中的值,fileItem.getString("UTF-8"),"UTF-8"防止中文乱码 System.out.println(fileItem.getFieldName()+"\t"+fileItem.getString("UTF-8")); } else { //上传的是文件,获得文件上传字段中的文件名 //注意IE或FireFox中获取的文件名是不一样的,IE中是绝对路径,FireFox中只是文件名 String fileName = fileItem.getName(); System.out.println(fileName); //Substring是字符串截取,返回值是一个截取后的字符串 //lastIndexOf(".")是从右向左查,获取.之后的字符串 String ext = fileName.substring(fileName.lastIndexOf(".")); //UUID.randomUUID().toString()是javaJDK提供的一个自动生成主键的方法, UUID的唯一缺陷在于生成的结果串会比较长 String name = UUID.randomUUID()+ext; //将FileItem对象中保存的主体内容保存到某个指定的文件中 File file = new File("E:\\火影忍者\\"+name); fileItem.write(file); } } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }else{ System.out.println("普通表单"); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }