美图秀秀M4 头像编辑器是一款集旋转裁剪、特效美化、人像美容为一体的在线头像编辑工具。适用于有设置头像需求的BBS、SNS、微博和社区等Web产品。

美图秀秀,JAVA提供了示例可参考,流式上传 或者 标准表单上传,于是采用标准表单上传。

List items = upload.parseRequest(request);//得到所有的文件

复制代码

以上为截取部分代码,美图的API采用的common-fileupload解析上传操作,但是问题出现了,items获取的值为空,查阅了部分资料,原来是SpringMvc上传配置的锅:

class="org.springframework.web.multipart.commons.CommonsMultipartResolver ">

复制代码

把这段代码注释掉,重新上传就可以,但是其他使用到了SpringMvc上传的Controller就不起作用了。

原因

原来springMVC已经为我们封装好成自己的文件对象了,转换的过程就在我们所配置的CommonsMultipartResolver这个转换器。

/**

* Parse the given servlet request, resolving its multipart elements.

* @param request the request to parse

* @return the parsing result

* @throws MultipartException if multipart resolution failed.

*/

protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {

String encoding = determineEncoding(request);

FileUpload fileUpload = prepareFileUpload(encoding);

try {

List fileItems = ((ServletFileUpload) fileUpload).parseRequest(request);

return parseFileItems(fileItems, encoding);

}

catch (FileUploadBase.SizeLimitExceededException ex) {

throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(), ex);

}

catch (FileUploadBase.FileSizeLimitExceededException ex) {

throw new MaxUploadSizeExceededException(fileUpload.getFileSizeMax(), ex);

}

catch (FileUploadException ex) {

throw new MultipartException("Failed to parse multipart servlet request ", ex);

}

}

复制代码

他的转换器里面就是调用common-fileupload的方式解析,然后再使用parseFileItems()方法封装成自己的文件对象 。

List fileItems = ((ServletFileUpload) fileUpload).parseRequest(request);

复制代码

上面的这句代码,springMVC已经使用过fileUpload解析过request了,而我们在Controller里面接收到的request已经是解析过的,你再次使用fileupload进行解析获取到的肯定是空,这个就是问题的所在。

解决方案

使用SpringMvc的API进行上传操作,部分伪代码:

String basePath =request.getSession().getServletContext().getRealPath("/file/avatar/ ");

//上传文件目录

File filePath = new File(basePath);

MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;

//注意这里获取的是avatar

MultipartFile mf = mRequest.getFile("avatar ");

//用户ID做为用户头像的名称

String baseName = userType+"_ "+userId;

String newFileName = baseName+"_ "+FLAG_L+".jpg ";

//输出头像

FileOutputStream fos = new FileOutputStream(filePath + Constant.SF_FILE_SEPARATOR + newFileName);

fos.write(mf.getBytes());fos.flush();fos.close();

复制代码

作者: 小柒

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

美图秀秀java代码,【Java】SpringMvc整合美图秀秀M4(头像编辑器)相关推荐

  1. java代码规范(转载整合)

    1. 标识符命名规范 1.1 概述 标识符的命名力求做到统一.达意和简洁. 1.1.1 统一 统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用pr ...

  2. 圣诞快乐java代码,java版的下雪,大家圣诞快乐

    everybody, Merry Christmas ! 里面有播放音乐,太大了上传不了,想看效果的把播放音乐的代码注释掉就好了. 不好意思,图片忘记了,现补上了,不过图片是网上随便找的图扣的,不是很 ...

  3. java调用子系统代码_深入理解JAVA虚拟机-Idea远程执行本地Java代码 - Java 技术驿站-Java 技术驿站...

    今天在看深入理解JAVA虚拟机的9.3节,作者实现了一个远程执行功能.这个功能可以在远程服务器中临时执行一段程序代码,而去不依赖jdk版本,不改变原有服务端程序的部署,不依赖任何第三方库,不入侵原有的 ...

  4. 设计一个聊天窗口java代码,Java 设计的聊天程序-完整代码

    [实例简介] 这是一个Java 课程设计,模仿MSN.QQ等的界面.压缩包内有源码跟使用方法! [实例截图] [核心代码] Java设计的聊天程序-完整源码 └── Java 设计的聊天程序-完整源码 ...

  5. java存档_存档 Java 代码 - Java 入门教程

    目标 了解如何在 Eclipse 中创建 JAR 文件 能够将第三方代码导入您的 Java 应用程序 创建 JAR 现在您已经了解了如何编写 Java 应用程序,您可能想知道如何打包它们,以便其他开发 ...

  6. 超大数相乘的java代码,java版大数相乘

    在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 用java搞了一个版本 这里说一下思路 将数字已字符串形式接收,转换成int[]整型数组,然后num1[],num2[]依次 ...

  7. 最简判断闰年java代码,java判断闰年代码

    java判断闰年代码 java教程网[简单的一道题--用if-else 语句判断某年份是否为闰年]代码如下: package com.wenzhi;O网页链接 Python 代码:(java类似,算法 ...

  8. python灰度图生成g代码_artcam pro 通过灰度图生成G代码详细图文教程

    本文是使用artcam pro 把灰度图转成G代码,看到喜欢的雕刻,可以自己先做成灰度图,然后转换成G代码,今天特地做了一个教程,仅供刚刚接触者使用! 新手可以看看,老手请高抬贵手,不要嘲笑.自己技术 ...

  9. 【速学java】 java后台框架 springmvc整合mybatis框架源码

    三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] A 调用摄像头拍照,自定义裁剪编辑 ...

  10. 真香,50行Java代码爬取妹子套图!

    前言 当一个代码的工匠回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧,这样,当他老的时候,可以很自豪告诉世人,我曾经将代码注入生命去打造互联网的浪潮之巅,那是个很疯狂的时代,我在一波波的浪潮上留 ...

最新文章

  1. GraphQL 配合 JWT 使用 —— Laravel RSS (二)
  2. 工业机器人电柜布线_协作并联,重新注解并联机器人
  3. python服务器查看文件更改记录,Python记录到同一文件,不同用户
  4. mysql 堆叠查询_SQL 注入方法 - 盲注、报错注入、UNION查询注入与堆叠注入
  5. vue 是否有word编辑控件_GitHub - C84882428/editor-ui: vue集成 tinymce 富文本编辑器,增加导入 word 模板...
  6. 2020全国高考作文题出炉!网友:信心满满的点开,一脸懵逼的退出
  7. Python List:一文彻底粉碎列表
  8. 用线性代数理解 Normal Equation
  9. TensorFlow基础篇(四)—— tf.nn.relu()
  10. 怎么让背景铺满整个页面_PPT背景太单调,教你这3种实用的技巧!
  11. SQL Server 2008 修改安装路径
  12. 中国天气网城市编码获取地址
  13. 关于R4s软路由刷机教程
  14. 凸包旋转卡壳(andrew)
  15. CSS 画三角形、半圆、扇形、
  16. 计算机中存在旧版本的mf驱动程序,mf驱动程序安装指南.pdf
  17. jquery控制元素的隐藏和显示
  18. java交易撮合怎么实现_撮合交易系统服务边界与设计
  19. gcc 查看默认使用的C语言标准版本
  20. CF 3B. Lorry

热门文章

  1. springboot ---微信ocr身份证识别
  2. vs2010如何发布窗体应用程序到服务器,C++ CLR 使用(VS2012,VS2013,VS2015)编写Windows窗体应用程序...
  3. Ubuntu更新Chrome到最新的版本
  4. 智驾科技MAXIEYE完成3亿元B轮融资,暂未取得品牌同名商标
  5. NUC980 DIY项目大挑战 - EtherCAT实现
  6. 这份PDF让你知Spring其然,“Spring揭秘”更知其所以然
  7. 网易云音乐缓存文件解密
  8. Linux期末考试试题长沙理工,Linux期末考试试题8套(含答案)
  9. Solidworks:Solidworks2016软件程序破解详细攻略说明(也适合长时间没使用SW2016再次破解)
  10. 芯原股份正式加入UCIe产业联盟