• SpringMVC的 transferTo使用


    在开发Web应用程序时比较常见的功能之一,就是允许用户利用multipart请求将本地文件上传到服务器,而这正是Grails的坚固基石——SpringMVC其中的一个优势。Spring通过对ServletAPI的HttpServletRequest接口进行扩展,使其能够很好地处理文件上传。扩展后的接口名为org.springframework.web.multipart.MultipartHttpServletRequest,其内容如清单7-31所示。

    清单7-31 org.springframework.web.multipart.MultipartHttpServletRequest接口

    interface MultipartHttpServletRequest extends HttpServletRequest{

    public MultipartFile getFile(String name);

    public Map getFileMap();

    public Iterator getFileNames();

    }

    如清单所示,MultipartHttpServletRequest接口简单地扩展了默认的HttpServletRequest接口,并提供一些用来处理请求文件的方法。

    7.10.1  使用multipart请求

    实际上只要发现一个multipart请求,就表明在控制器实例中存在一个实现MultipartHttpServletRequest接口的request对象。我们可以通过清单7-31所示的方法来访问multipart请求中的上传文件,不过在处理上传文件之前,先来看一下上传表单的内容,如清单7-32所示。

    清单7-32  上传表单示例

    <form action="upload"enctype="multipart/form-data">

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

    <input type="submit" value="Upload! "/>

    </form>

    粗体显示的是需要注意的部分,实际上一个上传表单只需要满足如下两点。

     enctype属性的属性值设为multipart/form-data。

     input的type属性的属性值设为file。

    在前面的示例中,<input>标签中属性type的值为file,且name属性的值为myFile,之所以需要name属性值,是因为在使用接口MultipartHttpServletRequest的getFile方法时需要使用name属性的值。例如在清单7-33中,代码中的upload操作会从请求中读取上传文件。

    清单7-33  读取上传文件

    def upload = {

    def file = request.getFile('myFile')

    // 处理该文件

    }

    注意getFile方法不会返回一个java.io.File的实例,而是返回org.springframework.web.multipart.MultipartFile的一个实例,关于org.springframework.web.multipart.MultipartFile的详细信息,请参考清单7-34。如果在请求中没有找到文件则getFile方法返回null。

    清单7-34 org.springframework.web.multipart.MultipartFile接口

    interface MultipartFile {

    public byte[] getBytes();

    public String getContentType();

    public java.io.InputStream getInputStream();

    public String getName();

    public String getOriginalFilename();

    public long getSize();

    public boolean isEmpty();

    public void transferTo(java.io.File dest);

    }

    在MultipartFile接口中定义了如下很多有用的方法。

     使用getSize()方法获得文件长度,以此决定允许上传的文件大小。

     使用isEmpty()方法判断上传文件是否为空文件,以此决定是否拒绝空文件。

    使用getInputStream()方法将文件读取为java.io.InputStream流对象。

     使用getContentType()方法获得文件类型,以此决定允许上传的文件类型。

     使用transferTo(dest)方法将上传文件写到服务器上指定的文件。

    例如,如果上传的文件不为空并且大小不小于1024字节,那么可以按照清单7-35中的代码来实现。

    清单7-35  文件上传示例

    def upload = {

    def file = request.getFile('myFile')

    if(file && !file.empty&& file.size < 1024){

    file.transferTo( new java.io.File("/local/server/path/${file.name}" ) )

    }

    }

    直接使用MultipartHttpServletRequ

    est实例可以用来管理文件

  • 相关阅读:
    HDU3718 Similarity 最大权值匹配
    HDU2853 Assignment 最大权值匹配+简直是太神了
    HDU3488 Tour 再次感受到KM的强大
    ZOJ2575 Full of Painting 动态规划
    ZOJ2571 Big String Outspread 模拟
    POJ3565 Ants 空间点对不相交匹配最小权值匹配
    Fleury(弗罗莱)算法求欧拉路径
    HDU2426 Interesting Housing Problem 最大权值匹配不能完成匹配的处理
    POJ1392 Ouroboros Snake 欧拉回路
    HDU2255 奔小康赚大钱 最大权值匹配
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/11434015.html
Copyright © 2020-2023  润新知