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

清单7-31org.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上传表单示例

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

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

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

在前面的示例中,标签中属性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-34org.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接口中定义了如下很多有用的方法。

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

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

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

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

l使用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实例可以用来管理文件

transferto方法的应用_SpringMVC的 transferTo使用相关推荐

  1. transferto方法的应用_Java MultipartFile.transferTo方法代碼示例

    本文整理匯總了Java中org.springframework.web.multipart.MultipartFile.transferTo方法的典型用法代碼示例.如果您正苦於以下問題:Java Mu ...

  2. transferto方法的应用_NIO的transferTo方法

    大家好!我最近在做NIO,为什么我使用NIO的transferTo方法貌似数据没有加载到管道 求大神指点 package com.etwin.opps.policy.mvc; import java. ...

  3. transferto方法的应用_FileChannel中transferTo方法的使用

    FileChannel中的transferTo方法并不一定能完整传输所有数据.在文档中解释如下: public abstract long transferTo(long position, long ...

  4. MultipartFile的transferTo方法注意事项

    前言 最近用SpringBoot写文件上传功能,使用参数绑定之后确实是非常的方便了.但是,项目部署就出现了问题,搞得我一脸懵逼.后来,才发现是因为我使用了相对路径导致的,这个绝对是一个坑人的地方,不过 ...

  5. transferto的流这么关闭_Java 9中InputStream的transferTo()方法的重要性?

    在Java 9中,transferTo()方法已添加到InputStream类中.该方法已用于在Java中将数据从输入流复制到输出流.这意味着它将从输入流中读取所有字节,然后按读取顺序将字节写入输出流 ...

  6. 聊聊MultipartFile的transferTo方法

    默认已经知道:MultipartFile  这个类一般是用来接受前台传过来的文件. 那transferTo方法有什么作用呢? 打开源码: public void transferTo(File des ...

  7. java file transferto_jvm源码分析之FileChannel.transferTo()方法

    FileChannel.transferTo()方法 public abstract long transferTo(long position, long count, WritableByteCh ...

  8. transferTo 方法

    package com.common.learn; import java.io.BufferedReader; import java.io.File; import java.io.FileInp ...

  9. MultipartFile的transferTo方法的坑

    前言 最近用SpringBoot写文件上传功能,使用参数绑定之后确实是非常的方便了.但是,项目部署就出现了问题,搞得我一脸懵逼.后来,才发现是因为我使用了相对路径导致的,这个绝对是一个坑人的地方,不过 ...

最新文章

  1. Linux下完全卸载ORACLE 10G的方法
  2. python—sql语句参数化
  3. android handler 主线程吗,[android开发]非主线程进行handler操作
  4. oracle 文件写 n r,文本模式读写文件中\r和\n的问题
  5. ECCV 2020 《Propagating Over Phrase Relations for One-Stage Visual Grounding》论文笔记
  6. 程序员怎样锻炼编程思维(学习方法)
  7. asp.net MVC留言本示例
  8. 动态三角形(动态规划思想入门)
  9. scala reduce和Fold
  10. 【ArcGIS Server】切片时C盘空间不足(本地缓存目录空间不足)
  11. @Formula的使用
  12. Win10 IE浏览器无法打开HTTPS网站的解决方法--win10专业版
  13. 2021-09-21
  14. safetynet android,SafetyNet Attestation API:远程评估Android设备的真伪
  15. mc服务器不显示皮肤,游戏中不显示皮肤的可能原因
  16. 关于大数据后端粉丝交流群
  17. centos7安装并使用licode四:下载licode并使用
  18. 不可错过的javascript迷你库 1
  19. 新时代高校辅导员工作素养的新要求及提升路径(非原创)
  20. 峰面积峰高半峰宽_峰高峰面积的计算方法.

热门文章

  1. dx200手环使用方法_dx200电子烟安装说明书
  2. 多一份胜利,多一份胆量
  3. 笔记本触摸板按键不能用、不能双指三指滑动和双指单击右键解决办法
  4. python根据经纬度转换详细地址_基于python实现地址和经纬度转换
  5. 麻将癞子剪枝算法效率优化
  6. 联想笔记本有福啦:最新联想Windows 7简体中文旗舰版OEM光盘镜像下载
  7. [转载]汇总各浏览器核心(js引擎及排版引擎)深究
  8. pytorch构建deeplabv3+
  9. ebay如何通过html上传图片,eBay怎么上传图片?分享2个给eBay产品添加图片的方法...
  10. Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)