您的位置:首页 > 其它

Servlet文件上传||@MultipartConfig标注属性

2017-09-12 23:05 369 查看
在Servlet3.0之前,处理上传文件的操作一直是让开发者头疼的问题,因为Servlet本身没有对此提供直接的支持,需要使用第三方框架来实现,而且使用起来也不够简单。
Servlet3.0提供了对文件上传的支持,通过@MultipartConfig标注和HttpServletRequest的两个新方法getPart()和getParts(),开发者能够很容易实现文件的上传操作。

@MultipartConfig标注主要是为了辅助Servlet3.0中HttpServletRequest提供的对上传文件的支持。该标注写在Servlet类的声明之前,一表示该Servlet希望处理的请求时multipart/form-data类型的。另外,该标注还提供了若干属性用于简化对上传文件的处理。

@MultipartConfig标注属性

fileSizeThershold         int型      是(可选)     描述:当前数据量大于该值时,内容将被写入文件。

location               String型           是(可选)     描述:存放生成文件的地址

maxFileSize        long型             是(可选)     描述:允许上传的文件最大值,默认为-1,表示没有限制

maxRequestSize    long型         是(可选)     描述:针对 multipart/form-data 请求的最大数量,默认为-1,表示没有限制

[html] view
plain copy

<!--index.html文件部分代码-->  

<form action="/HelloWorld/UpLoad" method="post" enctype="multipart/form-data">  

    <input type="file" name="file">  

    <input type="submit" name="upload" value="上传">  

</form>  

[java] view
plain copy

/*UpLoad.java为上传文件的Servlet类*/  

package javaee.servlet;  

import …………  

//设置访问活着调用这个Servlet的路径  

@WebServlet("/UpLoad")  

//说明该Servlet处理的是multipart/form-data类型的请求  

@MultipartConfig  

public class UpLoad extends HttpServlet{  

    private static final long serialVersionUID = 1L;  

    public UpLoad(){  

        super();  

    }  

    protected void doGet(HttpServletRequest request,HttpServletResponse response)  

        throws ServletException,IOException{  

        this.doPost(request, response);  

    }  

    protected void doPost(HttpServletRequest request,HttpServletResponse response)  

            throws ServletException,IOException{  

        //说明输入的请求信息采用UTF-8编码方式  

        request.setCharacterEncoding("utf-8");  

        response.setContentType("text/html; charset=UTF-8");  

        PrintWriter out = response.getWriter();  

        //Servlet3.0中新引入的方法,用来处理multipart/form-data类型编码的表单  

        Part part = request.getPart("file");  

        //获取HTTP头信息headerInfo=(form-data; name="file" filename="文件名")  

        String headerInfo = part.getHeader("content-disposition");  

        //从HTTP头信息中获取文件名fileName=(文件名)  

        String fileName = headerInfo.substring(headerInfo.lastIndexOf("=") + 2, headerInfo.length() - 1);  

        //获得存储上传文件的文件夹路径  

        String fileSavingFolder = this.getServletContext().getRealPath("/UpLoad");  

        //获得存储上传文件的完整路径(文件夹路径+文件名)  

        //文件夹位置固定,文件夹采用与上传文件的原始名字相同  

        String fileSavingPath = fileSavingFolder + File.separator + fileName;  

        //如果存储上传文件的文件夹不存在,则创建文件夹  

        File f = new File(fileSavingFolder + File.separator);  

        if(!f.exists()){  

            f.mkdirs();  

        }  

        //将上传的文件内容写入服务器文件中  

        part.write(fileSavingPath);  

        //输出上传成功信息  

        out.println("文件上传成功~!");  

    }  

}  

[java] view
plain copy

/DownLoadjava为下载文件的Servlet类*/  

package javaee.servlet;  

import …………  

@WebServlet("/DownLoad")  

public class DownLoad extends HttpServlet{  

    private static final long serialVersionUID = 1L;  

    public DownLoad(){  

        super();  

    }  

    protected void doGet(HttpServletRequest request ,HttpServletResponse response)  

            throws ServletException,IOException{  

        this.doPost(request, response);  

    }  

    protected void doPost(HttpServletRequest request, HttpServletResponse response)  

            throws ServletException,IOException{  

        try{  

            //服务器相对路径  

            String filepath = "WEB-INF/web.xml";  

            //服务器绝对路径  

            String fullFilePath = getServletContext().getRealPath(filepath);  

            System.out.println(fullFilePath);  

            /*打开文件,创建File类型的文件对象*/  

            File file = new File(fullFilePath);  

            /*如果文件存在*/  

            if(file.exists()){  

                System.out.println("文件存在");  

                /*获得文件名,并采用UTF-8编码方式进行编码,以解决中文问题*/  

                String filename = URLEncoder.encode(file.getName(), "UTF-8");  

                System.out.println(filename);  

                /*重置response对象*/  

                response.reset();  

                //设置文件的类型,xml文件采用text/xml类型,详见MIME类型的说明  

                response.setContentType("text/xml");  

                //设置HTTP头信息中内容  

                response.addHeader("Content-Disposition","attachment:filename=\"" + filename + "\"" );  

                //设置文件的长度  

                int fileLength = (int)file.length();  

                System.out.println(fileLength);  

                response.setContentLength(fileLength);  

                /*如果文件长度大于0*/  

                if(fileLength!=0){  

                    //创建输入流  

                    InputStream inStream = new FileInputStream(file);  

                    byte[] buf = new byte[4096];  

                    //创建输出流  

                    ServletOutputStream servletOS = response.getOutputStream();  

                    int readLength;  

                    //读取文件内容并写到response的输出流当中  

                    while(((readLength = inStream.read(buf))!=-1)){  

                        servletOS.write(buf, 0, readLength);  

                    }  

                    //关闭输入流  

                    inStream.close();  

                    //刷新输出缓冲  

                    servletOS.flush();  

                    //关闭输出流  

                    servletOS.close();  

                }  

            }else {  

                System.out.println("文件不存在~!");  

                PrintWriter out = response.getWriter();  

                out.println("文件 \"" + fullFilePath + "\" 不存在");  

            }  

        }catch(Exception e){  

            System.out.println(e);  

        }  

    }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: