2019独角兽企业重金招聘Python工程师标准>>>

转贴自:http://zhupan.iteye.com/blog/26427

实现图片上传 
  用户必须能够上传图片,因此需要文件上传的功能。比较常见的文件上传组件有Commons FileUpload(http://jakarta.apache.org/commons/fileupload/a>)和COS FileUpload(http://www.servlets.com/cos),Spring已经完全集成了这两种组件,这里我们选择Commons FileUpload。 
  由于Post一个包含文件上传的Form会以multipart/form-data请求发送给服务器,必须明确告诉DispatcherServlet如何处理MultipartRequest。首先在dispatcher-servlet.xml中声明一个MultipartResolver:

xml 代码
  1. <bean id="multipartResolver"
  2. class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  3. <!-- 设置上传文件的最大尺寸为1MB -->
  4. <property name="maxUploadSize">
  5. <value>1048576</value>
  6. </property>
  7. </bean>

这样一旦某个Request是一个MultipartRequest,它就会首先被MultipartResolver处理,然后再转发相应的Controller。 
在UploadImageController中,将HttpServletRequest转型为MultipartHttpServletRequest,就能非常方便地得到文件名和文件内容:

java 代码
  1. public ModelAndView handleRequest(HttpServletRequest request,
  2. HttpServletResponse response) throws Exception {
  3. // 转型为MultipartHttpRequest:
  4. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
  5. // 获得文件:
  6. MultipartFile file = multipartRequest.getFile(" file ");
  7. // 获得文件名:
  8. String filename = file.getOriginalFilename();
  9. // 获得输入流:
  10. InputStream input = file.getInputStream();
  11. // 写入文件
  12. // 或者:
  13. File source = new File(localfileName.toString());
  14. multipartFile.transferTo(source);
  15. }

生成缩略图 (目录)
  当用户上传了图片后,必须生成缩略图以便用户能快速浏览。我们不需借助第三方软件,JDK标准库就包含了图像处理的API。我们把一张图片按比例缩放到120X120大小,以下是关键代码:

java 代码
  1. public static void createPreviewImage(String srcFile, String destFile) {
  2. try {
  3. File fi = new File(srcFile); // src
  4. File fo = new File(destFile); // dest
  5. BufferedImage bis = ImageIO.read(fi);
  6. int w = bis.getWidth();
  7. int h = bis.getHeight();
  8. double scale = (double) w / h;
  9. int nw = IMAGE_SIZE; // final int IMAGE_SIZE = 120;
  10. int nh = (nw * h) / w;
  11. if (nh > IMAGE_SIZE) {
  12. nh = IMAGE_SIZE;
  13. nw = (nh * w) / h;
  14. }
  15. double sx = (double) nw / w;
  16. double sy = (double) nh / h;
  17. transform.setToScale(sx, sy);
  18. AffineTransformOp ato = new AffineTransformOp(transform, null);
  19. BufferedImage bid = new BufferedImage(nw, nh,
  20. BufferedImage.TYPE_3BYTE_BGR);
  21. ato.filter(bis, bid);
  22. ImageIO.write(bid, " jpeg ", fo);
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. throw new RuntimeException(
  26. " Failed in create preview image. Error:  "
  27. + e.getMessage());
  28. }
  29. }

转载于:https://my.oschina.net/nyniuch/blog/185266

Spring中MultipartHttpServletRequest实现文件上传相关推荐

  1. Spring MVC-09循序渐进之文件上传(基于Servlet3.0+内置功能)

    概述 测试 源码 概述 Spring MVC-09循序渐进之文件上传(基于Apache Commons FileUpload) 上篇博文我们说了基于Apache Commons FileUpload的 ...

  2. ASP.NET中常用的文件上传下载方法

    ASP.NET中常用的文件上传下载方法 文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括: 1.如何解决文件上传大小的限制 2.以文件形式保存到服务 ...

  3. aspx 中轻松实现文件上传

    aspx 中轻松实现文件上传 在aspx中实现文件上传是非常容易的,如下代码: private string upLoadFile(System.Web.UI.HtmlControls.HtmlInp ...

  4. 【Spring学习笔记-MVC-13.2】Spring MVC之多文件上传

    作者:ssslinppp       1. 摘要 前篇文章讲解了单文件上传<[Spring学习笔记-MVC-13]Spring MVC之文件上传>http://www.cnblogs.co ...

  5. java B2B2C 仿淘宝电子商城系统-Spring Cloud Feign的文件上传实现

    在Spring Cloud封装的Feign中并不直接支持传文件,但可以通过引入Feign的扩展包来实现,本文就来具体说说如何实现.需要JAVA Spring Cloud大型企业分布式微服务云构建的B2 ...

  6. Spring Cloud Feign的文件上传实现

    福利持续进行中,免费加入知识星球和斐讯K3抽奖等你来!!! 在Spring Cloud封装的Feign中并不直接支持传文件,但可以通过引入Feign的扩展包来实现,本文就来具体说说如何实现. 服务提供 ...

  7. Spring MVC-09循序渐进之文件上传(基于Servlet3.0+Html5客户端上传文件)

    示例 测试 源码 虽然Servlet3.0+中上传文件,我们在服务端编程即可非常容易,但是用户体验却不是非常友好.单独的一个HTML表单并不能显示进度条,或者显示已经成功上传的文件数量. 不管是Jav ...

  8. Spring MVC-09循序渐进之文件上传(基于Apache Commons FileUpload)

    概述 客户端编程 MultipartFile接口 利用Commons FileUpload上传文件 Domain类 控制器 配置文件 JSP页面 部署及测试 源码 概述 Servlet出现之前,文件上 ...

  9. Springboot中常用的文件上传和下载通用接口

    记录下通用的文件上传和下载接口,一般的开发中都是会使用到的,不过写的最简单的版本. 文章目录 程序测试 本文小结 程序测试 在yml中配置一个文件保存的路径 #保存文件的路径 common:file: ...

最新文章

  1. 比CRUD多一点儿(三):UPDATE、DELETE语句
  2. canvas整体放大_【HTML5】Canvas 实现放大镜效果
  3. Template Method(模板方法)--类行为型模式
  4. 借攻防演习提升企业安全能力
  5. 20201219:力扣219周周赛题解
  6. javascript基础-函数
  7. 电脑服务器系统被管理员停用,Win7系统任务管理器已被系统管理员停用怎么办?...
  8. 差别对待!双一流高校只给2020级博士涨“工资”,不顾其他年级引争议
  9. qq视频转码失败怎么办_迅捷视频转换器腾讯视频转换失败如何解决?
  10. 网站中CSS是实现什么功能的,什么是CSS,其主要作用是什么
  11. 计算机win10开机音乐,Windows10系统更改开关机声音的两种方法
  12. (Adventure项目)自行车业务数据分析报告(五)
  13. (C语言)signed和unsigned类型转化
  14. 2020平行驾驶与矿山无人化驾驶
  15. 【51单片机】延时函数计算问题以及如何准确延时
  16. 图像文本检测的标注工具_如何检测图像中的文本
  17. 360兼容模式,搜狗等奇葩浏览器下无法正常渲染的问题
  18. 病毒币骗局:号称募资生产口罩,研究疫苗
  19. 嵌入式c语言小学期实验报告,小学期单片机实验报告
  20. 用Matlab把 .txt文件中的16进制数据转换成2进制数据

热门文章

  1. day01:关于惯性导航工具箱的学习与使用:use of the progen
  2. 变步长的梯形求积法matlab,基于MATLAB的变步长梯形数值积分法的研究与实验
  3. 两路语音 两路计算机数据综合,两路语音PCM时分复用系统的设计.DOC
  4. 如何选择合适的加密芯片
  5. ANSI字符与Unicode字符的互相转换
  6. linux下文本文件转换编码格式的方法
  7. 苹果自研基带野心不死:给高通300多亿后,正洽购英特尔调制解调器业务
  8. 老司机和驾驶辅助系统相处得如何?MIT研究人员做了个科学研究
  9. 干货分享 | 详解特征工程与推荐系统及其实践(附PPT)
  10. 比特币交易平台软件开发:比特币和以太坊有什么区别?