前端代码:
<form method="post" action="Servlet01" enctype="multipart/form-data">
文件描述: <input type="text" name="desc">
上传文件:<input type="file" name="fileName"><br>
<input type="submit">
</form>
后台代码:
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.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@WebServlet(urlPatterns = "/Servlet01")
public class Servlet01 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//1.创建文件磁盘工厂对象
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
//2.创建核心解析类ServletFileUpload,构造方法中传递文件磁盘工厂对象disfileItemFactory
ServletFileUpload upload = new ServletFileUpload(diskFileItemFactory);
//判断enctype类型是否为mulitpart-form/data true
boolean flag = ServletFileUpload.isMultipartContent(request);
if(!flag){
System.out.println("表达类型不合法");
return;
}
//设置上传文件的编码,解决中文文件上传后的乱码问题
upload.setHeaderEncoding("UTF-8");
//3.调用核心解析类的parseRequest方法解析request对象,得到一个list
List<FileItem> list = upload.parseRequest(request);
//4.循环遍历list
for (FileItem item : list) {
//判断每一个item是否为普通选isFormField
if (item.isFormField()){
//如果是普通想获取name和value值,可以设置编码
String fieldName = item.getFieldName();
String value = item.getString("UTF-8");
System.out.println("filename="+fieldName+",value"+value);
}else{
//判断如果是上传项,获取输入流
//获取上传文件的名称,获得输入流和输出流
String name = item.getName();
//获取输入流
InputStream inputStream = item.getInputStream();
//创建输出流
//FileOutputStream outputStream = new FileOutputStream("E:\\upload\\"+name);
FileOutputStream outputStream = new FileOutputStream("E:\\ideal_workspace\\upload\\"+name);
//进行io读写操作
int len;
byte[] bytes = new byte[1024];
while ((len=inputStream.read(bytes))!=-1){
outputStream.write(bytes,0,len);
}
//关闭资源
outputStream.close();
inputStream.close();
item.delete();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
}