在开发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实例可以用来管理文件

SpringMVC的 transferTo使用相关推荐

  1. SpringMVC的 transferTo使用以及MultipartHttpServletRequest接口

    1. MultipartHttpServletRequest 在开发Web应用程序时比较常见的功能之一,就是允许用户利用multipart请求将本地文件上传到服务器,而这正是Grails的坚固基石-- ...

  2. vue+springboot保存头像

    流程:前端传过去头像,后端接收,然后创建再项目的类路径下创建这个头像,然后把这个头像的地址放到数据库,更新该用户的头像,然后返回这个用户信息,前端接收到这个用户信息,获取到头像地址,访问到项目中保存的 ...

  3. transferto()方法,是springmvc封装的方法,用于图片上传时,把内存中图片写入磁盘

    //上传图片//1图片存储的路径String pic_path="";//2原名称String originalFilename = items_pic.getOriginalFi ...

  4. Java项目:在线水果商城系统(java+JSP+Spring+SpringMVC +MyBatis+html+mysql)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 功能: 区分为管理员用户和普通用户,普通用户:用户注册登录,首页水果展示,商品分类展示,购物车添加,下单,订单查询,个人信息修 ...

  5. SpringMvc+ajax实现文件跨域上传

    最近开始学习SpringMVC框架,在学习数据绑定的时候,发现可以使用@RequestParam注解绑定请求数据,实现了文件上传.但是如果一个项目是前后端分离的,前端系统向后端服务上传文件该怎么解决了 ...

  6. SpringMVC实现文件的上传和下载

    SpringMVC实现文件的上传和下载http://www.bieryun.com/1120.html 前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:"用什么技术来实现一般网页上文件的 ...

  7. SpringMVC 之拦截器和异常处理

    1. 文件上传 Spring 使用 Jakarta Commons FileUpload 技术实现了一个 MultipartResolver 实现类: CommonsMultipartResolver ...

  8. SpringMVC图片上传

    2019独角兽企业重金招聘Python工程师标准>>> 环境:springMVC+commons-fileupload实现文件上传到Tomacat目录下. 1.添加maven依赖 c ...

  9. java多图片上传json_[Java教程]SpringMVC框架五:图片上传与JSON交互

    [Java教程]SpringMVC框架五:图片上传与JSON交互 0 2018-08-07 22:00:42 在正式图片上传之前,先处理一个细节问题: 每一次发布项目,Tomcat都会重新解压war包 ...

最新文章

  1. rudesocket如何使用_[WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebS...
  2. 政务数据放开在即 政策红利下大数据投资亮点凸显
  3. qq传java文件_java学习:基于TCP的网络文件传输(可改写的QQ文件传输)
  4. 阿里云(一)云存储OSS的命令行osscmd的安装和使用
  5. java跨用问题怎么解决_跨浏览器问题的五种解决方案
  6. Android之调用系统分享
  7. linux 执行sh 文件是遇到找不到cd '目录'
  8. c和java内存泄漏区别_内存溢出和内存泄漏的区别(转)
  9. P1720 月落乌啼算钱(斐波那契数列)--python3实现
  10. 动态规划_01背包问题_Java实现
  11. API和Web API(1)
  12. 计算机网络安全方面论文题目,计算机网络安全方面论文题目 计算机网络安全毕业论文题目怎么定...
  13. python3爬取国家统计局,区域城乡代码
  14. 智能机器人_微分平坦与最小化加加加速度
  15. UG NX 12.0入门
  16. wordpress之模板汉化(poedit的使用技巧 及 .po .mo 批量生成技术)
  17. 奖券数目2.1题目描述有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是N位数,要求其中不要出现带
  18. 麻将开金算法java代_通用麻将胡牌算法
  19. 来看一场开发者大会,缘何引来千人盛况
  20. 『一起学AI』生成对抗网络(GAN)原理学习及实战开发

热门文章

  1. 数据结构—查找(第八章)
  2. IIS 6.0 支持Php
  3. Dual Band Wireless-AC 3165无线网卡 win10 无法开启热点 解决
  4. 10套word版个人简历模板,各种风格个人简历模板
  5. Linux下Watchdog
  6. openstack的endpoint
  7. Window自带的定时自动执行程序
  8. 怎样在for循环变量中,将循环变量赋值给一个变量 批处理 bat
  9. ACM-ICPC 数论部分总结
  10. 企企通X长青热能SRM项目成功上线,共同打造智能高效的数字化采购管理平台