1. MultipartHttpServletRequest

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

org.springframework.web.multipart.MultipartHttpServletRequest接口

interface MultipartHttpServletRequest extends HttpServletRequest{

public MultipartFile getFile(String name);

public Map getFileMap();

public Iterator getFileNames();

}

可以看出,MultipartHttpServletRequest接口简单地扩展了默认的HttpServletRequest接口,并提供一些用来处理请求文件的方法。

2.使用multipart请求

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

上传表单示例

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

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

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

</form>

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

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

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

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

3.读取上传文件

def upload = {

def file = request.getFile('myFile')

// 处理该文件

}

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

示例1org.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中的代码来实现。

文件上传示例

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}" ) )

}

}

直接使用MultipartHttpServletRequest实例可以用来管理文件

本文转载自:https://blog.csdn.net/u013380777/article/details/58603803

SpringMVC的 transferTo使用以及MultipartHttpServletRequest接口相关推荐

  1. SpringMVC的 transferTo使用

    在开发Web应用程序时比较常见的功能之一,就是允许用户利用multipart请求将本地文件上传到服务器,而这正是Grails的坚固基石--SpringMVC其中的一个优势.Spring通过对Servl ...

  2. spring-mvc引入jackson-dataformat-xml依赖后部分接口返回xml

    工程是一个spring-mvc,使用jackson作为RestController序列化组件,一切都相安无事.直到有一天添加依赖的时候,间接引入了jackson-dataformat-xml,惊奇的发 ...

  3. SpringMVC如何实现restful接口

    今天看一个SpringMVC的项目,然后编写接口,并通过前台的ajax调用来访问接口,当然这所有的一切好像都没有什么问题,你看下面是我们的ajax, function sendMessage() {v ...

  4. SpringMVC之使用Validator接口进行验证

    对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证.SpringMVC自身对数据在服务端的校验有一个比较好的支持,它能将我们提 ...

  5. transferto方法的应用_SpringMVC的 transferTo使用

    在开发Web应用程序时比较常见的功能之一,就是允许用户利用multipart请求将本地文件上传到服务器,而这正是Grails的坚固基石--SpringMVC其中的一个优势.Spring通过对Servl ...

  6. b站尚硅谷springmvc学习视频:springmvc文档

    文章目录 一.SpringMVC简介 (b站尚硅谷springmvc学习视频:springmvc文档) 1.什么是MVC 2.什么是SpringMVC 3.SpringMVC的特点 二.HelloWo ...

  7. SpringMVC的相关知识

    目录 SpringMVC 一.SpringMVC简介 1.概述 2.特点 二.入门案例 1.创建一个webapp项目 2.导入相关包 3.配置web.xml文件 4.创建请求控制器 5.配置Sprin ...

  8. SpringMVC笔记-尚硅谷(杨博超)

    文章目录 一.SpringMVC简介 1.什么是MVC 2.什么是SpringMVC 3.SpringMVC的特点 二.HelloWorld 1.开发环境 2.创建maven工程 a>添加web ...

  9. 尚硅谷SpringMVC笔记

    文章目录 一.SpringMVC简介 1.什么是MVC 2.什么是SpringMVC 3.SpringMVC的特点 二.HelloWorld 1.开发环境 2.创建maven工程 a>添加web ...

最新文章

  1. axis1 web Service 环境部署
  2. 共享一些知识点的学习地址
  3. python中matplotlib条形图数值大的在最底层显示_如何使用python的matplotlib模块绘制水平条形图...
  4. OpenGL 本机MSAA的实例
  5. 在linux安装requests库命令,在Linux--Ubuntu18.04环境下安装requests库
  6. 使用百度API实现语音识别——in python
  7. Python分离GIF动画成为多帧图像
  8. 基于layuiCMS2.0开发后台管理系统,实现自定义分页并动态加载数据表格的示例...
  9. 一些常见的js问题总结
  10. android 钢琴调音软件,钢琴调音软件(TuneLab Pro)
  11. 初学C语言,可能需要的软件及下载方式
  12. 数据拟合MATLAB与origin哪个好,Origin:数据处理、作图和拟合的利器
  13. 进程的守护神 - daemontools(进程监控)
  14. C语言 汉字名字排列组合
  15. 笔记本设置wifi热点并抓包
  16. u盘文件打不开怎么才能恢复
  17. SAP中成本中心实际/计划/差异报表查询实例
  18. 二级分销系统开发源码可以用多久?
  19. 中国通信简史 (下)
  20. python 自动上色_Github | 线稿自动上色

热门文章

  1. 请用Python语言写一个巨潮资讯网批量下载PDF的程序
  2. @Async注解测试用例附源码(一)
  3. 重新开始在学校的生活了
  4. 多语言CMS诞生:逐浪CMS全民族语言与国际版全面启航,开启没有鸿沟的世界
  5. 如何修改服务器远程端口
  6. NGS测序中PCR重复序列的判定方法
  7. 一个正在学习php菜鸟的自述
  8. 解剖Android USB MTP 的激活流程
  9. phpstudy导入mysql节点
  10. 扩展欧几里得定理详解和运用(就不信你看不懂!)