·实现以下代码前需要在项目中添加jar包commons-fileupload-1.2.1.jar 和其支持jar包commons-io-1.4.jar(即使用commons-fileupload-1.2.1.jar的前提是加载commons-io-1.4.jar)
package com.yinhe.upload;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
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("/upLoadServlet")
public class upLoadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//获取上传文件保存路径
String basePath = this.getServletContext().getRealPath("/WEB-INF/upload");
System.out.println(basePath);
String message="";
//创建一个DiskFileItemFactory
DiskFileItemFactory factory = new DiskFileItemFactory();
//创建一个文件上传解析器
ServletFileUpload fileUpload = new ServletFileUpload(factory);
//处理中文乱码
fileUpload.setHeaderEncoding("utf-8");
//判断提交数据是否是上传表单的数据
if(!ServletFileUpload.isMultipartContent(request)){
return;
}
try {
List<FileItem> list = fileUpload.parseRequest(request);
for(FileItem item:list){
//判断表单是普通表单还是上传表单
if(item.isFormField()){
//普通数据
String name=item.getFieldName();
System.out.println(name);
}else{
//上传文件
String fileName=item.getName();
if(fileName==null || fileName.trim().equals("")){
continue;
}
//获取文件名
fileName=fileName.substring(fileName.lastIndexOf("\\")+1);
//创建一个文件输入流
InputStream in =item.getInputStream();
//创建一个文件输出流
FileOutputStream out = new FileOutputStream(basePath+"/"+fileName);
//创建一个缓冲区
byte[] buffer=new byte[1024];
int len=0;
//循环将输入流读入缓冲区当中
while((len=in.read(buffer))>0){
//使用输出流将缓冲区的数据写入到指定目录
out.write(buffer, 0, len);
}
//关闭流
in.close();
out.close();
//删除临时 文件
item.delete();
message="文件上传成功";
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
message="文件上传失败";
e.printStackTrace();
}
request.setAttribute("message", message);
request.getRequestDispatcher("/message.jsp").forward(request, response);
}
}