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

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

ea615f1ddb243d534b19d3ef54c14a7c.png

美图秀秀,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();

复制代码

作者: 小柒

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值