zoukankan      html  css  js  c++  java
  • Servlet 3.0 上传文件

    创建一个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>Insert title here</title>
    <script type="text/javascript">
    </script>
    </head>
    <body>
        <form action="FileUploadServlet" method="post" enctype="multipart/form-data">
            <input type="file" id='fileUpload' name="fileUpload"/>
            <input type="submit" value="上传文件"/>
        </form>
    </body>
    </html>

    创建一个servlet处理:

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Collection;
    
    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;
    
    /**
     * Servlet implementation class FileUploadServlet
     */
    @MultipartConfig
    @WebServlet("/FileUploadServlet")
    public class FileUploadServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        public FileUploadServlet() {
            super();
        }
    
        @SuppressWarnings("unused")
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获取上传文件列表集合
            Collection<Part> parts = request.getParts();
    
            for(Part p : parts){
                String name = p.getName();//name是获取的前台input type=file的name值。
                long size = p.getSize();//size是文件大小。
    
                Collection<String> headerNames = p.getHeaderNames();
                /**
                 * Content-Disposition:form-data; name="fileUpload"; filename="60-130121114121.jpg"
                 *  Content-Type:image/jpeg
                 */
                String cd = p.getHeader("Content-Disposition"); 
                String cds[] = cd.split(";");
                if(cds == null || cds.length < 3)
                    throw new IllegalArgumentException();
                String fileNameStr = cds[2];
                String[] files = fileNameStr.split("=");
                String fileName = files[1];
                InputStream in = p.getInputStream();
                if(fileName != null)
                    fileName = fileName.substring(1, fileName.length()-1);
                dealFile(in, fileName.trim());
    
            }
            response.setCharacterEncoding("gbk");
            response.getWriter().append("上传成功!");
    
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
        private void dealFile(InputStream in, String fileName){
            OutputStream out = null;
            try{
                byte[] b = new byte[1024];
                //此处path仅做示例,需要自己改写。
                String path = "d:\test\"+fileName;
                out = new FileOutputStream(new File(path));
    
                int len = 0;
                while((len = in.read(b)) != -1){
                    out.write(b, 0, len);
                }
            }catch(Exception e){
                e.printStackTrace();
            }finally {
                try {
                    if(in != null)
                        in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    if(out != null)
                        out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
    }

    @MultipartConfig:需要加上这个注解,否则上传无效。

    关于servlet3.0注解新特性参考文章:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/

  • 相关阅读:
    How to use VS2012 remote debug Windows Azure Cloud Services
    vue ---05 分页和详情页功能的实现
    vue ----04课程列表的展示
    vue--03 首页和登陆注册
    luffy--03 首页和登陆注册(跨域问题的解决)
    luffy--02 ---项目配置和数据库链接
    luffy---01
    DRF---一些配置/设置
    drf-路由
    drf视图
  • 原文地址:https://www.cnblogs.com/Kevin-1992/p/12608398.html
Copyright © 2011-2022 走看看