第一步:(步骤结束后面就是html和servlet的源码)
准备一个form表单:特别注意的是form表单里要添加
enctype="multipart/form-data"
第二步:准备一个servlet
1:创建一个上传组件工厂
2;创建一个上传组件
3:设置文件上传的字符集
4:生成表单元素的集合
5:遍历集合,判断是不是表单元素
6:不是的话,就获取文件名称
7:通过get方法获取文件内容存放在字节数组中
8:获取一个当前web应用的物理路径
9:在路径下添加一个接受上传文件的额目录
10:判断目录是否存在,不存在就创建
11:把文件名称追加到刚才新建的目录中,
12:通过这个文件路径创建一个文件输出流
13:通过输出流写出就OK了
html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/upload" method="post" enctype="multipart/form-data"> <lable>username</lable><input type="text" name="username"> <lable>img</lable><input type="file" name="img"> <input type="submit"> </form> </body> </html>
servlet:
package userservlet; 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 javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; @WebServlet(name = "UploadServlet",urlPatterns = {"/upload"}) public class UploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //上传组件工厂 DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory(); //创建上传组件工厂 ServletFileUpload servletFileUpload=new ServletFileUpload(diskFileItemFactory); //设置上传文件字符集 servletFileUpload.setHeaderEncoding("UTF-8"); //生成表单元素 try { List<FileItem> fileItems=servletFileUpload.parseRequest(request); for (FileItem fileItem:fileItems){ if(fileItem.isFormField()){//判断是否是表单 System.out.println(fileItem.getString()); }else{ //获取上传文件名称 String name=fileItem.getName(); byte[] b=fileItem.get();//获取文件内容 //获取在开发Web方面的应用时, 经常需要获取 服务器中当前WebRoot的物理路径 String path=this.getServletContext().getRealPath("/"); System.out.println(path); //在服务器的当前物理路径添加一个目录 File f=new File(path+File.separator+"upload"); //判断目录是否存在,不存在就创建 if(!f.isDirectory()){ f.mkdir(); } //把要上传的文件名称追加到刚才的路径上 String filename=path+File.separator+"upload"+File.separator+name; //根据文件文件创建一个文件输出流 FileOutputStream out=new FileOutputStream(filename); //写出文件 out.write(b); out.close(); } } } catch (FileUploadException e) { e.printStackTrace(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }