在实际开发过程中,尤其是web项目开发,文件上传和下载的需求的功能非常场景,比如说用户头像、商品图片、邮件附件等等。其实文件上传下载的本质都是通过流的形式进行读写操作,而在开发中不同的框架都会对文件上传和下载有或多或少的封装,这里就以Spring MVC环境中文件的上传为例,讲解Spirng MVC环境下的文件上传功能实现。

一、客户端编程

      由于多数文件上传都是通过表单形式提交给后台服务器的,因此,要实现文件上传功能,就需要提供一个文件上传的表单。同时该表单必须满足以下3个条件:

  • form表单的method属性设置为post;
  • form表单的enctype属性设置为multipart/form-data;
  • 提供<input type="file" name="fileName" />的文件上传输入框。

在HTML5之前,如果想要上传多个文件,必须使用多个<input>元素。但是在HTML5中,在<input>元素配置multiple属性即可进行多个文件的上传。在HTML5中编写以下任意一行代码,便可生成一个按钮供选择多个文件:

  • <input type="file" name="fileName" multiple />
  • <input type="file" name="images" multiple="multiple" />
  • <input type="file" name="images" multiple="" />

具体代码示例如下:

<form action="uploadUrl" method="post" enctype="multipart/form-data"><input type="file" name="images" multiple="multiple" /><input type="submit" value="文件上传" />
</form>

二、springmvc-config.xml配置文件配置

当客户端form表单的enctype属性为multipart/form-data时,浏览器就会采用二进制流的方式来处理表单数据,而对于文件上传的处理则涉及在服务器端解析原始的HTTP请求。Spring MVC为文件上传提供了直接的支持,这种支持是用即插即用的MultipartResolver实现的。

在Sring MVC中使用MultipartResolver也非常简单,只需要在Spring MVC配置文件springmvc-config.xml中定义MultipartResolver接口实现类即可,示例如下:

<!-- 配置文件上传类型解析器 multipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 设置上传文件最大尺寸,单位为B --><property name="maxUploadSize" value="5242880" />
</bean>

  注意:

由于MultipartResolver实现类CommonsMultipartResolver内部是引用multipartResolver字符串获取该实现类对象并完成文件上传操作的,所以在配置CommonsMultipartResolver时必须指定该bean的id为multipartResolver。另外由于MultipartResolver实现类CommonsMultipartResolver是Spring MVC内部通过Apache Commons FileUpload技术实现的。因此Spirng MVC的文件上传还需要依赖Apache Commons FileUpload的组件,即需要导入支持文件上传和下载的JAR包,具体如下:

  • commons-fileupload.jar
  • commons-io.jar

三、后台文件下载实现(MultipartFile接口介绍)

当完成上述客户端代码的编写及文件上传组件的配置后,在Spring MVC中处理已经上传的文件就十分容易了,上传到Spring MVC程序中的文件会被封装到一个MultipartFile对象中,然后开发者通过该对象的方法就可以进行后续相关处理了。

编写后台文件上传控制器类及方法,具体示例如下:

/*** 向文件上传页面跳转*/
@RequestMapping("/toFileUpload")
public String toFileUpload( ){return "fileUpload";
}
/*** 接收文件上传请求*/
@RequestMapping("/fileUpload")
public String fileUpload(List<MultipartFile> images){//对上传图像进行解析操作if(images !=null && images.size()>0){for (MultipartFile image : images) {//获取上传文件的原始名称String originalFilename = image.getOriginalFilename();//设置上传文件的保存地址目录String dirPath="D:\\fileUpload\\";File file =new File(dirPath);//如果保存文件的地址不存在,就先创建目录if(!file.exists()){file.mkdirs();}//使用UUID重新命名上传的文件名称(看公司需求,也可以用日期时间)String newFilename= UUID.randomUUID()+originalFilename.substring(originalFilename.lastIndexOf("."));try {//使用MultipartFile接口的方法完成文件上传到指定位置image.transferTo(new File(dirPath+newFilename));//文件上传成功后,需要将文件存放路径存入数据库中//TODO,省略} catch (Exception e) {e.printStackTrace();//当文件上传出现异常,则重定向到文件上传页面return "redirect:toFileUpload";} }}//文件上传成功后,跳转到成功页面return "success";
}

四、效果演示(读者可以自己编写项目和jsp页面)

    部署并启动web服务器,在浏览器地址啦输入地址:http://localhost:8080/webname/toFileUpload后(读者根据自己的项目和路径进行访问),浏览器的显示效果如下图所示

上面我选择了上传2个文件,然后点击提交后,即可完成上传。读者操作后可自行到指定上传位置进行验证。

至此,Sring MVC环境下文件上传功能代码即已实现。

转载于:https://www.cnblogs.com/com-itheima-crazyStone/p/6739862.html

Spring MVC环境中的文件上传功能实现相关推荐

  1. Spring MVC更多家族成员----文件上传---06

    Spring MVC更多家族成员----文件上传---06 本节导读 文件上传与MultipartResolver 使用MultipartResolver进行文件上传的简单分析 StandardSer ...

  2. Spring MVC 高级技术之文件上传(multipart)

    目录 1.所需 jar 包 2.配置文件上传解析器 3.前端 Form 4.后台接收 Handler 文件上传,即处理 multipart 形式的数据. 原生 servlet 处理上传的文件数据的,s ...

  3. Spring Boot 文件上传功能实现与简单示例

    Java 语言中, 文件上传使用较早和较广泛的方式是使用Apache Commons FileUpload,这是Apache组织提供的一个文件上传的库, 但是在Servlet 3.0 之后, Java ...

  4. nfine框架 上传文件_网站服务器Nginx运行环境,后台文件上传超出Nginx的最大值...

    解决方法: 1.修改Nginx的配置文件(一般是:nginx/nginx.conf),在 http{} 段中增大nginx上传文件大小限制 #设置允许发布内容为8M client_max_body_s ...

  5. android webview 多文件上传,Android中的webview支持页面中的文件上传实例代码

    Android webview在默认情况下是不支持网页中的文件上传功能的: 如果在网页中有,在android webview中访问时也会出现浏览文件的按钮 但是点击按钮之后没有反应... 那么如何能够 ...

  6. query AjaxUpload实现多文件上传功能代码实例教程

    在PHP网站开发中,文件上传功能时常用到,之前我已介绍过如何利用PHP实现文件上传功能.随着WEB技术的发展,用户体验成为衡量网站成功与否的关键,今天和大家分享如何在PHP中利用Jquery实现Aja ...

  7. SSM开发书评网29:后台二:wangEditor图片上传;(主要内容是【wangEditor图片上传的文档要求】,【Spring MVC整合FileUpload组件,以实现文件上传功能】)

    说明: (1)本篇博客内容说明:[在后台系统,我们点击新增按钮后,会弹出新增图书对话框]→[该对话框中,包含一个wangEditor富文本编辑器]→[wangEditor富文本编辑器中,可以包含图片] ...

  8. Asp.net MVC 1.0 RTM中实现文件上传

    Asp.net MVC 1.0 RTM中实现文件上传 在我们开始之前,你需要知道一个form以post方式上传文件的方式,你将要增加一个特别的enctype attribute到form标签上,为了这 ...

  9. 【ASP.NET教程-WP教程08】ASP.NET Web Pages - 文件-在ASP.NET Web Pages中处理文件和实现文件上传功能的介绍

    ASP.NET Web Pages - 文件处理与上传 在ASP.NET Web Pages开发中,文件处理和上传是常见的任务之一.文件处理涉及到多个方面,包括文件的读取.写入.复制.移动和删除等操作 ...

最新文章

  1. 【为自己相亲】单身小姐姐你在哪里,我是书豪,我在等你
  2. php this 代表什么,php中$this-)是什么意思?
  3. Linux CentOS 6.x设置静态IP(亲测有效)
  4. 【springboot+easypoi】一行代码搞定excel导入导出
  5. 征稿 | 软件学报专刊征文:知识赋能的信息系统
  6. 快克SEO站群搜狗提交工具
  7. UE3 关卡优化指南
  8. Virtio-blk Performance Improvement
  9. TangerineWallpaper for Mac(高清橘子壁纸) 中文版
  10. 如何实现代码自动生成?
  11. DotNetBar 14中文版
  12. 电子系统综合设计作业笔记
  13. 电机与拖动matlab仿...,电机与拖动基础及MATLAB仿真习题答案(第四章)
  14. linux安装ps软件教程,如何在Linux上安装Adobe Photoshop | MOS86
  15. Ubuntu/Debian安装护眼软件f.lux indicator applet
  16. 批处理文件——BAT学习
  17. 叮叮获取所有用户信息_使用Postman获取微信公众号用户列表,循环遍历查询所有用户的详细信息...
  18. 多少人败给了一个字:等 ! 宋丹丹、梁静茹、张国荣。。。
  19. XCTF-WEB练习区-004-cookie
  20. 直方图和柱状图的区别有哪些

热门文章

  1. JavaIO操作(1)字节流和字符流-1
  2. 编译httpd-2.4.46的RPM包
  3. java内部类 缺点_Java中的内部类及其优势
  4. Python在linux服务器上解压,python3传文件到linux服务器然后解压
  5. 【跃迁之路】【425天】刻意练习系列184—SQL(2018.04.06)
  6. Linux之 手动释放内存
  7. Qt中两种定时器用法
  8. dojo从asp.net中获取json数据
  9. 再谈JSON -json定义及数据类型
  10. 将数组A中的内容和数组B中的内容进行交换(数组一样大)