写在前面:

  之前在上传文件的时候,使用的是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. ASP.NET MVC5(二):控制器、视图与模型

    前言 本篇博文主要介绍ASP.NET MVC中的三个核心元素:控制器.视图与模型,以下思维导图描述了本文的主要内容. 控制器 控制器简介 在介绍控制器之前,简单的介绍一下MVC工作原理:URL告知路由 ...

  2. 使用类似于中介者模式实现不同VC之间的跳转

    在2013年的时候,我们就已经实现了类似于http地址进行页面跳转, 那个时候,主要是用继承ViewController和给 UIViewController和UINavigationControll ...

  3. axis调用webservice的简单方法

    package com.service; import org.apache.axis.client.Call; import org.apache.axis.client.Service; publ ...

  4. jdbc的配置及jdbc连接常用数据库(mysql、sqlserver、Oracle)

    1.连接SQL Server数据库 import java.sql.*; publicclassMain{publicstaticvoid main(String[] args){String dri ...

  5. B树和B+树的总结

    B树 为什么要B树 磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动.盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的读写.那么这就存在 ...

  6. javascript走马灯的效果(文档标题文字滚动)

    做一些网站的时候,文档标题会滚动,这个效果是走马灯的效果. <!DOCTYPE html> <html> <head> <meta charset=" ...

  7. Zab: A simple totally ordered broadcast protocol(译)

    摘要 这是一个关于ZooKeeper正在使用的全序广播协议(Zab)的简短概述.它在概念上很容易理解,也很容易实现,并且提供很高的性能.在这篇文章里,我们会呈现ZooKeeper在Zab上的需求,也会 ...

  8. MongoDB--架构搭建(主从、副本集)之副本集

    任何时间点只有一个活跃节点,其他为备份节点,当活跃节点泵机,将会通过选举规则,从备选节点选一个当活跃节点,当泵机的节点恢复之后,则变为备用节点. 节点类型 stabdard:常规节点,存储完整数据,参 ...

  9. java实现Excel的导入、导出

    一.Excel的导入 导入可采用两种方式,一种是JXL,另一种是POI,但前者不能读取高版本的Excel(07以上),后者更具兼容性.由于对两种方式都进行了尝试,就都贴出来分享(若有错误,请给予指正) ...

  10. django-xadmin列表页filter关联对象搜索问题

    环境:xadmin-for-python3 python3.5.2 django1.9.12 问题描述:Product ProductSku两个实体,ProductSku FK外键关联Product ...