写在前面:

  之前在上传文件的时候,使用的是commons-file-upload这个插件,非常方便,能控制每个文件的大小,总共大小,缓存,以及支持多个文件的同时上传,但是写一次上传文件的后台代码量太大了,如图

如果有多个地方都要上传文件,每一次都要复制,粘贴一遍又一遍,实在是太麻烦,后台想到能不能把相同的代码都封装到一个方法,然后需要使用的时候再稍微改一下就行了,在封装的过程中,发现原来SpringMVC有自带的上传文件组件,遂用了一下,感觉多然很方面!

下面详细的说一下使用步骤!

  1,准备好相应的Jar包

    ①commons-fileupload.jar

    ②commons-io-2.4.jar

    版本可能无需跟我一样,但这两个jar包是必须的!

  2,配置SpringMVC的上传文件解析器:

  

其中有主要有两个属性

  maxUploadSize:上传文件的总限制大小(单位是字节)

  maxInMemorySize:缓存大小(单位同样是字节)

注意:这里的ID不能改变!

  3,书写代码:

     

这里简单的说明一下,

    MultipartHttpServletRequest

        主要用到的方法有两个

        ①getFiles("FiledName")

        获取表单中FiledName这个标签所勾选的文件,getFiles能获取多个文件

        ②getFileMap()这个也能获取上传的照片,不过只能获取单个文件,还是建议使用getFiles比较方便

  

  MultipartFile

      主要用到的方法有

      ①getContentType()获取文件类型 例如:images/JPEG

      ②getSize()获取单个文件的大小 单位 字节

      ③getOriginalFilename()获取文件的名字 可以根据这个来获取文件的后缀名

以上是将表单中的图片读到了服务器的内存中,暂时这些图片是放在内存中,如果要对图片的分辨率或者是其他信息进行检测该怎么办呢?

  以前的办法是先将图片保存在服务器的硬盘上,然后读取这个图片的信息,如果不符合则删除,符合再继续执行其他操作

  今天看了同事之前的一段代码,恍然大悟,其实只要用到流就能读取到这个图片的信息

  在MultipartFile里面有个方法是getInputStream()

  ImageIo有个方法是read()参数类型正好是输入流值是一个BufferedImaged

  所以我们可以这样,BufferedImaged img=ImageIO.read(mf.getInputStream());

  然后再判断这个img的相关属性,如果对的话再将其写入硬盘中,如果不符合就丢弃!

注意:

  我在做上传图片的时候遇到过一个问题,上传了10张图片不调试的时候只能成功1张,调试的时候又全部成功,究其原因原来是我将每个图片以当前时间戳为命名方式,但是程序运行太快,一秒钟就处理了好多张图片,也就是说同一秒内写入了三张图片,因为文件名相同,所以只有最后一张图片会保留在硬盘上,其余的都被覆盖了 。。。我也是醉了加个随机数吧!

  

【SpringMVC】使用SpringMVC进行上传文件!的更多相关文章

  1. SpringMVC实现PUT请求上传文件

    在JQuery中,我们可以进行REST ful中delete和put的请求,但是在java EE标准中,默认只有在POST请求的时候,servlet 才会通过getparameter()方法取得请求体 ...

  2. springMVC+spring+hibernate注解上传文件到数据库,下载,多文件上传

    数据库 CREATE TABLE `annex` ( `id` bigint() NOT NULL AUTO_INCREMENT, `realName` varchar() DEFAULT NULL, ...

  3. SpringMvc (注解)中的上传文件

    第一步:导入commons-fileupload-1.3.1.jar 和commons-io-2.2.jar 架包 第二步:在applicationContext.xml中 配置 <bean i ...

  4. (H5)FormData+AJAX+SpringMVC跨域异步上传文件

    最近都没时间整理资料了,一入职就要弄懂业务,整天被业务弄得血崩. 总结下今天弄了一个早上的跨域异步上传文件.主要用到技术有HTML5的FormData,AJAX,Spring MVC. 首先看下上传页 ...

  5. SpringMVC上传文件的三种方式(转)

    直接上代码吧,大伙一看便知 这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/common ...

  6. SpringMVC上传文件的三种方式

    直接上代码吧,大伙一看便知 这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/common ...

  7. SpringMVC+jquery.uploadify 上传文件

    前言 以前用Asp.net MVC+uploadify上传文件,最近学习SpringMVC,所以就用SpringMVC+uploadify做个上传文件的demo. 刚开始用form表单的方式提交,在C ...

  8. SpringMVC上传文件的三种方式(转载)

    直接上代码吧,大伙一看便知 这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/common ...

  9. SpringMVC上传文件的三种方式(转帖)

    /* * 通过流的方式上传文件 * @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象 */ @Re ...

  10. springmvc上传文件,抄别人的

    SpringMVC中的文件上传 分类: SpringMVC 2012-05-17 12:55 26426人阅读 评论(13) 收藏 举报 stringuserinputclassencoding 这是 ...

随机推荐

  1. Vue基础概念,学习环境等

    前提: 你已有 HTML.CSS 和 JavaScript 中级前端知识. 概念: Vue.js(读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vu ...

  2. JavaScript中对事件简单的理解(1)

    事件(event) 1.什么是JavaScript事件? 事件是文档或浏览器中发生的特定交互瞬间. 2.事件流 事件流描述的是从页面中接受事件的顺序,包含IE提出的事件冒泡流与Netscape提出的事 ...

  3. EF Core学习Code First

    下面通过实例来学习EF Core Code First,也就是通过EF Core迁移来完成从模型生成数据库. 本实例使用EntityFrameworkCore SQLite 数据库进行介绍,大家也可以 ...

  4. WPF MVVM 架构 Step By Step(3)(把后台代码移到一个类中)

    我觉得大部分开发者应该已经知道怎么去解决这个问题.一般都是把后台代码(GLUE code)移动到一个类库.这个类库用来代表UI的属性和行为.任何代码当被移到一个类库中时都可以被编译成一个DLL,然后可 ...

  5. Ubuntu17.04配置LNMP(Nginx+PHP7+MySQL)简单教程 快速 易学 简单易懂

    我安装的是当前最新的Ubuntu版本17.04,在虚拟机中先试用一下,如果没有什么不稳定的现象,准备以后作为主力操作系统 Ubuntu属于Debian系的Linux系统,拥有着一个很NB的软件包管理器 ...

  6. Vue实战Vue-cli项目构建(Vue+webpack系列之一)

    用Vue比较长一段时间了,大大小小做了一些项目,最近想总结一下知识点,出一个Vue+webpack系列,先从项目构建说起--vue-cli. 由于是Vue+webpack这里就不赘述git那些东西,默 ...

  7. 你的MySQL服务器开启SSL了吗?

    最近,准备升级一组MySQL到5.7版本,在安装完MySQL5.7后,在其data目录下发现多了很多.pem类型的文件,然后通过查阅相关资料,才知这些文件是MySQL5.7使用SSL加密连接的.本篇主 ...

  8. jquery 检测某元素是否含有某属性

    检测某元素是否含有某属性 if(typeof($("#aid").attr("rel"))=="undefined")

  9. [leetcode-515-Find Largest Value in Each Tree Row]

    You need to find the largest value in each row of a binary tree. Example: Input:    1   / \  3 2 / \ ...

  10. 10.解决VUEX刷新的时候出现数据消失

    通常,我们在使用vue编写页面时,会需要使用vuex在组件间传递(或者说共同响应)同一个数据的变化.例如:用户的登录信息. 下面,我们使用传递用户登录信息的例子来一步步解决这个问题. 首先,我们的第一 ...