写在前面:

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

  

最新文章

  1. 新手,Visual Studio 2015 配置Boost库,如何编译和选择,遇到无法打开文件“libboost_thread-vc140-mt-gd-1_63.lib“的解决办法
  2. Sicily 1051: 魔板(BFS+排重)
  3. 相克军_Oracle体系_随堂笔记012-undo
  4. u盘安装Fedora23
  5. webpack入门(一)——webpack 介绍
  6. javascript里面支持el表达式和<s:iterator>
  7. 面试感悟----一名3年工作经验的程序员应该具备的技能 JAVA 必读书
  8. 23web app实现上下左右滑动
  9. 关于调用约定(cdecl、fastcall、、thiscall) 的一点知识(用汇编来解释)good
  10. ubuntu12.04下搭建ftpserver
  11. 广告频次控制(frequency capping)
  12. RabbitMQ学习-1
  13. 03标准对象-01-Date和JSON
  14. Java学习笔记7(简易的超市库存管理系统示例)
  15. DataGridView显示数据库内容及更新内容到数据库
  16. mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理
  17. Java XML Dom解析工具
  18. Python:向MySQL数据库插文件
  19. echarts4的学习
  20. 自写Jquery插件 Datagrid

热门文章

  1. [codeforces113D]Museum
  2. Spring事务管理—aop:pointcut expression解析
  3. 有关苹果无法导出p12证书的问题解决办法。
  4. IE6不支持position:fixed的解决方法
  5. Java Web开发环境配置(JDK+Tomcat++IDEA 14)
  6. loadrunner 手工参数拼接与l oadrunner的url编码
  7. 更改zendstudio花括号匹配显示的方法
  8. 编写运行最简单的java程序——使用记事本编写java程序
  9. 使用base64提升视觉效果体验
  10. Vijos 1011 清帝之惑之顺治 记忆录式的动态规划(记忆化搜索)