一、简介
使用form表单上传文件,使用post传参方式,利用抓包工具可以直接查看传递的内容,但若是图片等,那么会在请求包体中显示为乱码,此时,我们可以根据请求包的结构来解析,最终取得上传的文件。更为简洁的方法就是,使用已经包装较为完善的工具包。
二、环境
所需jar包
commons-fileupload-1.3.2.jar
commons-io-2.5.jar
下载地址
http://commons.apache.org/proper/commons-fileupload/
http://commons.apache.org/proper/commons-io/
三、实例
jsp
<form action="../register.servlet" method="post" enctype="multipart/form-data">
userName:<input type="text" value="" name="username"></input><br/>
password:<input type="password" value="" name="password"></input><br/>
picture:<input type="file" name="picture"></input><br/>
file:<input type="file" name="picture"></input><br/>
<input type="submit" value="提交" />
</form>
java
package com.upload.servlet;
import java.io.File;
import java.io.IOException;
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("/register.servlet")
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
/*设置编码格式*/
servletFileUpload.setHeaderEncoding("utf-8");
try {
List<FileItem> list = servletFileUpload.parseRequest(request);
for (FileItem fileItem : list) {
if(fileItem.isFormField()){/*表单*/
String name = fileItem.getFieldName();
/**设置表单获取的值的编码格式/
String value = fileItem.getString("utf-8");
System.out.println(name+":"+value);
}else{/*文件*/
String name = fileItem.getName();
String path = getServletContext().getRealPath("/")+"upload";
System.out.println(path);
File file = new File(path);
/*若是文件不存在,则创建*/
if(!file.exists()){
file.mkdirs();
}
File saveFile = new File(file, name);
fileItem.write(saveFile);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}