实现文件上传的步骤
- 创建文件上传表单
index.html
<html>
<head>
<title>文件上传</title>
</head>
<body>
<h3>文件上传</h3></br>
<span>请上传文件</span></br>
<form action="UploadServlet" method="post" enctype="multipart/form-data">
<input type="file" name="file" size="50"/>
</br>
<input type="submit" value="上传" />
</form>
</body>
</html>
web.xml
<context-param>
<description>Location to store uploaded file</description>
<param-name>file_upload</param-name>
<param-value>
\data\uploadFiles\
</param-value>
</context-param>
pom.xml
<!--io支持系统流,浏览器上传至后台-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<!--fileupload 可以实现文件上传功能,且fileupload依赖于io-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
UploadServlet.java
public class UploadServlet extends HttpServlet{
private String filePath;
private boolean isMultipart;
private int maxMemSize = 4*1024;
private int maxFileSize = 50*1024;
private File file;
public void init(){
//获取文件上传父路径
filePath = getServletContext().getInitParameter("file-upload");
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException , java.io.IOException{
//ServletFileUpload 在 commons.fileupload 下
isMultipart = ServletFileUpload.isMultipartContent(request);
response.setContentType("text/html");
java.io.PrintWriter out = response.getWriter( );
if( !isMultipart ){
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>No file uploaded</p>");
out.println("</body>");
out.println("</html>");
return;
}
//创建磁盘文件对象
DiskFileItemFactory factory = new DiskFileItemFactory();
//文件大小最大值存储在内存中
factory.setSizeThreshold(maxMemSize);
//超出最大内存的数据临时保存文件位置
factory.setRepository(new File("c:\\temp");
//创建一个新的文件上传处理程序
ServletFileUpload upload = new ServletFileUpload(factory);
//允许上传的文件大小
upload.setSizeMax(maxFileSize);
try{
//解析请求,获取文件
List fileItems = upload.parseRequest(request);
//获取上传文件迭代器
Iterator i = fileItems.iterator();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
while(i.hasNext()){
FileItem fi = (FileItem)i.next();
//判断是否为文件表单字段,若为true则为普通文本表单字段,若为false则为文件表单字段
if(!fi.isFormField()){
//获取上传文件参数
//文本表单名
String filedName = fi.getFieldName();
//文件名
String fileName = fi.getName();
//文件类型
String contentType = fi.getConentType();
//判断是否存在内存
boolean isInMemory = fi.isInMemory();
//文件大小
long sizeInBytes = fi.getSize();
//写入文件
if(fileName.lastIndexOf("\\") >= 0){
file = new File(filePath + fileName.substring(fileName.lastIndexOf("\\")));
}else{
file = new File(filePath + fileName.substring(fileName.lastIndexOf("\\")+1));
}
fi.write(file);
out.println("Uploaded Fieldname:" + fieldName + "<br>");
out.println("Uploaded Filename:" + fileName + "<br>");
out.println("Uploaded contentType:" + contentType + "<br>");
out.println("Uploaded isInMemory:" + isInMemory + "<br>");
out.println("Uploaded sizeInBytes:" + sizeInBytes + "<br>");
}
}
out.println("</body>");
out.println("</html>");
}catch(Exception e){
System.out.println(e);
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
throw new ServletException("GET method used with " + getClass( ).getName( )+": POST method required.");
}
}
编译和运行Servlet
web.xml
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>