servlet web3.0文件上传
在web3.0以前,文件上传基本上市通过common-fileupload或者SmartUpload。上传比较麻烦,在Servlet 3.0 中不需要导入任何第三方jar包,并且提供了很方便进行文件上传的功能。
注:
1. html中 <input type="file">表示文件上传控件;
2. form的 enctype="multipart/form-data";
3.在Servlet类前加上 @MultipartConfig
4.servlet中用request.getPart()获得;
下面是一个文件上传的例子:
upload.jsp源码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>web3.0文件上传</title>
</head>
<body>
<div>
<form method="post" enctype="multipart/form-data" action="uploadServlet.do">
名称:<input type="text" id="name" name="name" /> <br>
上传:<input type="file" id="file" name="file" /> <br>
<input type="submit" value="提交" />
</form>
</div>
</body>
</html>
UploadServlet.java源码:
package cn.ifly.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import cn.ifly.utils.UploadUtil;
@WebServlet(name = "uploadServlet", urlPatterns = { "/uploadServlet.do" })
@MultipartConfig
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
Part part = request.getPart("file");
out.println("文本框内容名称:" + name + "<br />");
out.println("此文件的大小:" + part.getSize() + "<br />");
out.println("此文件类型:" + part.getContentType() + "<br />");
out.println("文件名称:" + UploadUtil.getFileName(part) + "<br />");
part.write("D:\\1." + UploadUtil.getFileType(part));
}
}
UploadUtil.java(由于在Servlet 3.0中很难获取上传文件的类型,因此我写了UploadUtil工具类,可以方便获得上传文件的类型和上传文件的名称)
package cn.ifly.utils;
import javax.servlet.http.Part;
/**
* 文件上传工具类,根据Part对象得到文件的类型和文件的名称
*
* @desc: web3.0_fileupload
* @author: kpchen
* @createTime: 2014年11月10日 下午9:48:10
* @history:
* @version: v1.0
*/
public class UploadUtil {
public static String getFileType(Part p) {
String name = p.getHeader("content-disposition");
String fileNameTmp = name.substring(name.indexOf("filename=") + 10);
String type = fileNameTmp.substring(fileNameTmp.indexOf(".") + 1,
fileNameTmp.indexOf("\""));
return type;
}
public static String getFileName(Part p) {
String name = p.getHeader("content-disposition");
String fileNameTmp = name.substring(name.indexOf("filename=") + 10);
String fileName = fileNameTmp.substring(0, fileNameTmp.indexOf("\""));
return fileName;
}
}