实现文件上传功能
在此处使用了4个jar包,jdk版本是1.7
commons-fileupload-1.3.2.jar 下载链接
commons-io-2.5.jar下载链接
jsp-api.jar
servlet-api.jar
后面两个jar包在tomcat的lib目录下能找到
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* Created by leo01 on 17-1-20.
*/
public class getFileServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取文件保存路径 此处保存在/WEB-INF/upload/中
String savaPath = this.getServletContext().getRealPath("/WEB-INF/upload/");
File file = new File(savaPath);
//判断目录是否存在
if(!file.exists() && !file.isDirectory())
{
System.out.println(savaPath+"the File Path doesn't exists!\nCreating...");
file.mkdir();
System.out.println("succeed!");
}
String msg = "";
try
{
//上传文件
//1.创建DiskFileItemFactory对象
DiskFileItemFactory factory = new DiskFileItemFactory();
//2.创建ServletFileUpload对象并使用utf-8编码解决中文乱码问题
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
//3.从表格中获取文件,确保form的enctype="multipart/form-data"
if(!ServletFileUpload.isMultipartContent(request))
{
return;
}
//4.使用ServletFileUpload解码并返回FileItem 的 List
List<FileItem> list = upload.parseRequest(request);
for(FileItem item:list)
{
//4.1判断post的格式是文件还是formitems
if(item.isFormField())
{
//如果为formitems获取name:value对
String name = item.getFieldName();
String value = item.getString("UTF-8");
System.out.println(name + " = " + value);
}
else
{
String filename = item.getName();
System.out.println(filename);
if(filename == null || filename.trim().equals(" "))
{
continue;
}
//获取文件名字 File.separator保存了当前操作系统的分隔符
filename = filename.substring(filename.lastIndexOf(File.separator)+1);
InputStream in = item.getInputStream();
FileOutputStream out = new FileOutputStream(savaPath + File.separator + 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();
msg = "file upload succeed";
}
}
//TODO: to anaylize the file just got (using POI)
}
catch (Exception e)
{
msg = "file upload fail";
e.printStackTrace();
}
//跳转到另一个网页
request.setAttribute("message",msg);
request.getRequestDispatcher("/webpage/message.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}