Servlet3.0上传

287

前面的课程上传需要借助commons-fileupload包,经过创建解析工厂,创建解析器,解析等步骤进行上传

servlet3.0的上传在该工具包的基础上进一步封装,使得上传步骤更加简化,更重要的一点是可以使用

String getParameter(String name)

如何使用:

  1. 在解析上传数据的servlet上添加**@MultipartConfig**注释
  2. 通过form表单中的指定的name来获取Part
  3. 利用Part进行操作

例子: --处理上传数据的servlet


    import java.io.IOException;

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;

@WebServlet(urlPatterns="/UploadServlet")
@MultipartConfig //需要上传须使用该注释
public class UploadServlet extends HttpServlet {

    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");

        System.out.println(req.getParameter("username"));
        //获取part
        Part part = req.getPart("photo");
        //获取mime类型
        System.out.println(part.getContentType());
        //获取文件字节数
        System.out.println(part.getSize());
        //获取part的名称
        System.out.println(part.getName());
        //获取指定请求头的内容,通常这一步是用来获取文件名
        String cd = part.getHeader("Content-Disposition");
        String allfilename = cd.substring(cd.lastIndexOf(";") + 1);
        String filename = allfilename.substring(allfilename.indexOf("\"") + 1, allfilename.lastIndexOf("\""));
        System.out.println(filename);
        //讲上传的文件写入到磁盘
        part.write("e:/" + filename);
    }
}

表单:

<form action="<c:url value="UploadServlet"/>" method="post" enctype="multipart/form-data">
            用户名:<input type="text" name="username"/><br>
            照    片:<input type="file" name="photo"/><br>
            <input type="submit" value="提交"/>
</form>