上传文件的表单
1、使用Apache 的 Commons FileUpload
FileUpload下载地址:
http://commons.apache.org/fileupload/
下载:commons-fileupload-1.2.2-bin.zip 得到:commons-fileupload-1.2.2.jar
下载:commons-io-1.4-bin.zip 得到:commons-io-1.4.jar
2、web.xml配置上传的文件所在的文件夹名称uploads,同时要在webroot下新建这个文件夹uploads
<servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>up</servlet-name> <servlet-class>test.up</servlet-class> <!--一组键值对。设置初始化参数--> <init-param> <param-name>savePath</param-name> <param-value>uploads</param-value> </init-param> </servlet>
3、表单
<form method="POST" enctype="multipart/form-data" action="./servlet/up"> File to upload: <input type="file" name="upfile"><br/> Notes about the file: <input type="text" name="note"><br/> <br/> <input type="submit" value="Press"> to upload the file! </form>
4、servlet
注意init();
package test; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; 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; public class up extends HttpServlet { private ServletContext sc; private String savePath; /** * Constructor of the object. */ public up() { super(); } /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request * the request send by the client to the server * @param response * the response send by the server to the client * @throws ServletException * if an error occurred * @throws IOException * if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to * post. * * @param request * the request send by the client to the server * @param response * the response send by the server to the client * @throws ServletException * if an error occurred * @throws IOException * if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); try { List<FileItem> items = upload.parseRequest(request); for(FileItem item:items) { // 判断是否普通的表单数据 if (item.isFormField()) { System.out.println("表单参数名:" + item.getFieldName() + ",表单参数值:" + item.getString("UTF-8")); } else { if (item.getName() != null && !item.getName().equals("")) { System.out.println("上传文件的大小:" + item.getSize()); System.out.println("上传文件的类型:" + item.getContentType()); // item.getName()返回上传文件在客户端的完整路径名称 System.out.println("上传文件的名称:" + item.getName()); File tempFile = new File(item.getName()); // 上传文件的保存路径 File file = new File(sc.getRealPath("/") + savePath, tempFile.getName()); item.write(file); request.setAttribute("upload.message", "上传文件成功!"); } else { request.setAttribute("upload.message", "没有选择上传文件!"); } } } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); request.setAttribute("upload.message", "上传文件失败!"); } request.getRequestDispatcher("/rs.jsp").forward(request, response); } /* * 会被自动执行 参数ServletConfig,即在web.xml中配置的信息 */ public void init(ServletConfig config) { // 在web.xml中设置的一个初始化参数 savePath = config.getInitParameter("savePath"); sc = config.getServletContext(); } }
Done