1、创建DiskFileItemFactory对象,设置缓冲区大小和临时文件目录
2、使用DiskFileItemFactory 对象创建ServletFileUpload对象,并设置上传文件的大小限制。
3、调用ServletFileUpload.parseRequest方法解析request对象,得到一个保存了所有上传内容的List对象。
4、对list进行foreach
• 为普通表单字段,则调用getFieldName、getString方法得到字段名和字段值
• 为上传文件,则调用getInputStream方法得到数据输入流,从而读取上传数据。
代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class uploadPhotoServlet extends HttpServlet{
//查看源码,request和response顺序不能换
public void doPost(HttpServletRequest request, HttpServletResponse response) {
String name = null;
try {//DiskFileItemFactory --> ServletFileUpload --> FileItem
DiskFileItemFactory factory = new DiskFileItemFactory(); //创建FileItem 对象的工厂
factory.setSizeThreshold(1024*1024);//设置容量最大1MB
ServletFileUpload fileup = new ServletFileUpload(factory); //处理上传的文件数据,并将表单中每个输入项封装成一个FileItem 对象中
List<FileItem> items = fileup.parseRequest(request);//parseRequest解析所有request数据,每个数据都返回一个FileItem
for(FileItem item:items) {
//判断 每个读取到的fileitem数据是文件还是普通文本
if(item.isFormField()) {
//普通文本,就在tomcat中打印数据,也就是name="heroname"的值
System.out.println(item.getFieldName());//返回name-->"heroname"
String name1 = item.getString();//返回item中保存的数据流
System.out.println(name1);
}
//是文件
else {
name = System.currentTimeMillis()+".jpg";
String filepath = request.getServletContext().getRealPath("/");//获取当前项目的路径,“/”就是默认路径web
File f = new File(filepath, name);
f.getParentFile().mkdirs();//创建file对象时,都要判断父目录的存在
InputStream is=item.getInputStream();//创建流读取item中的数据
FileOutputStream fos = new FileOutputStream(f);//创建流输出
byte b[] = new byte[1024*1024];
int length=0;
while((length = is.read(b))!=-1) { //所有字节复制进新文件
fos.write(b, 0, length);
}
fos.close();
is.close();
}
}
String html = <img width='200' height='150' src='/%s'/>";//创建img
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.format(html, name);
}catch(Exception e) {e.printStackTrace();}
}
}