1、要有一个 form 标签,method=post 请求
2、form 标签的 encType 属性值必须为 multipart/form-data 值
3、在 form 标签中使用 input type=file 添加上传的文件
4、编写服务器代码(Servlet 程序)接收,处理上传的数据。
encType=multipart/form-data 表示提交的数据,以多段(每一个表单项一个数据段)的形式进行拼
接,然后以二进制流的形式发送给服务器
package com.LightIndustry.upload;
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 javax.servlet.*;
import javax.servlet.http.*;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// System.out.println("数据传递到当前页面");
//
// InputStream inputStream = request.getInputStream();
// byte [] buffer = new byte[10240000];
// int read = inputStream.read(buffer);
// System.out.println(new String(buffer,0,read) );
//首先判断当前上传的数据是否是多段数据
if(ServletFileUpload.isMultipartContent(request)){
//只有是多段的数据,才是上传的,返回值是boolean类型
FileItemFactory fileItemFactory = new DiskFileItemFactory();
//创建一个文件上传工厂
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
//上一步是创建爱你一个文件解析的工具类,下面的是将文件解析之后是一个list类型的文件
try {
List list = servletFileUpload.parseRequest(request);
for(FileItem fileItem : list){
if (fileItem.isFormField()){
//这里面是说明是一个普通的表单项
System.out.println("表单项的name属性值:"+fileItem.getFieldName());
System.out.println("表单项Value的值"+fileItem.getString("UTF-8"));
}else {
//这里面显示上传的文件
System.out.println("表单项的name属性值"+fileItem.getFieldName());
System.out.println("上传的文件名字"+ fileItem.getName());
fileItem.write(new File("D:\"+fileItem.getName()));
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}



