springmvc h5上传图片
工作中开发一个评价功能,需要上传拍照的图片,后台使用springmvc接收文件,前端FormData异步提交。
1. spring配置multipartResolver
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8" /> <!-- 编码 -->
<property name="maxInMemorySize" value="5120000" /> <!-- 上传时占用最大内存大小 (10240) -->
<property name="uploadTempDir" value="/" /> <!-- 上传临时保存目录名 ,带文件上传完成之后会自动删除保存的文件 -->
<property name="maxUploadSize" value="-1" /> <!-- 最大文件大小,-1为无限止(-1) -->
</bean>
2. 图片处理
现在的手机拍出的照片都比较大,一般都会进行压缩处理,这里提供一个开源插件:https://github.com/stomita/ios-imagefile-megapixel. 因为要预览图片,所以img实际是被转为了base64字符串进行显示:

图片压缩:
//压缩
var mpImg = new MegaPixImage(file);
var $img = document.createElement('img');
mpImg.render($img, { maxWidth: 1000, maxHeight: 1000, quality: 0.5},function () {
//1.获取压缩完成后的base64
var imgSrc = $img.src; //2.压缩完后上传
});
3. 图片上传方式
1.base64字符串上传,直接上传base64字符串,后台接收到字符串后解析base64转为file,因为1张图片生成的base64比较大,多张图片的话,请求体过大。
2. blob上传,将base64转为blob,然后后台以 List<MultipartFile>接收。
4. 上传
因为我用的是blob上传,所以将base64转为了blob,将上传的字段添加到FormData,然后ajax异步上传。
var formdata = new FormData();
formdata.append("userNo", "001");
formdata.append("content", "appraise content");
var imgs = $("#fileList .prev");
for (var i = 0;i < imgs.length;i++){//批量上传
formdata.append("uploadFileList",dataURItoBlob(imgs[i].src));//dataURItoBlob(imgs[i].src)将base64转为Blob
} //异步上传
$.ajax({
data:formdata,
url:'/test/upload',
type:"POST",
processData : false,
contentType : false,/**必须false才会自动加上正确的Content-Type**/
success:function(data){
//do it
},
error:function(XMLHttpRequest, textStatus, errorThrown){
//error
}
}); function dataURItoBlob(dataUrl) {
var byteString = atob(dataUrl.split(',')[1]);
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ab], { type: 'image/jpeg' });
}
5. 后台接收
@RequestMapping("/test/upload")
@ResponseBody
public Result<Boolean> submit(Model model,SubmitVo vo){
List<MultipartFile> fileList = vo.getUploadFileList();
//上传到本地,或者文件服务器
}
//以实体接收上传信息
public class SubmitVo implements Serializable {
private String userNo;
private String content;
private List<MultipartFile> uploadFileList;
}
springmvc h5上传图片的更多相关文章
- h5上传图片
1.如何在H5上传图片 使用FileReader 2.FileReader接口 传图片我们只用到readAsDataURL 3.FileReader接口事件 传图片我们只用到onload 4.如何使用 ...
- angular下H5上传图片(可多张上传)
最近做的项目中用到了angular下上传图片功能,在做的过程中遇到了许多问题,最终都得以解决 angular上传时和普通上传时过程差不多,只不过是要不一些东西转化为angular的东西. 1.ng-f ...
- H5上传图片并使用canvas制作海报
马上就要"十一"国庆节了,又恰逢公司已经三周岁了,所以市场部和产品共同策划了一个"正青春,共成长"的主题代言活动,准备在国庆节以及中秋节期间让公司员工和用户为公 ...
- H5上传图片之canvas
H5上传图片之canvas,使用canvas处理压缩图片再上传 html代码: <form action="" method="post"> < ...
- springMVC中上传图片
上传图片,很常见的问题,基本每个人都会遇到,但是个人认为在springMVC中上传图片相对来说是比较简单的,因为框架已经帮我们做好了许多事情. 这篇文章所用的环境:spring4.3.3 .jdk1. ...
- Maven+SpringMVC+MyBatis 上传图片
上传文件我一直都觉得很难,好吧,所有涉及文件操作的我都觉得不容易.然后今天尝试了从网页上传图片保存到服务器.这个例子的前提是搭建好了服务器端框架:Maven+Spring MVC+MyBatis.当然 ...
- HTML5+Spring-MVC实现上传图片本地保存
以下就是具体的代码: 1.在jsp页面中的代码: <span style="font-size:24px;"><form method="post&qu ...
- h5上传图片及预览
第一次做图片上传,记录一些问题. 1,图片的base64编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址.而网页上的每一个图片,都是需要消耗一个http请求下载而来的,使用base ...
- springmvc处理上传图片代码(校验图片尺寸、图片大小)
package com.maizuo.web.controller; import com.maizuo.domain.Result; import com.maizuo.util.Constants ...
随机推荐
- 2018 江苏省邀请赛 H
题目链接 https://nanti.jisuanke.com/t/28872 解析 递推 直接套杜教板子 AC代码 #include <cstdio> #include <cstr ...
- Codeforces 653D Delivery Bears【二分+网络流】
题目链接: http://codeforces.com/problemset/problem/653/D 题意: x个熊拿着相同重量的物品,从1号结点沿着路走到N号结点,结点之间有边相连,保证可以从1 ...
- Pick-up sticks--poj2653(判断两线段是否相交)
http://poj.org/problem?id=2653 题目大意:有n根各种长度的棍 一同洒在地上 求在最上面的棍子有那几个 分析: 我刚开始想倒着遍历 因为n是100000 想着会 ...
- Segments--poj3304(判断直线与线段之间的关系)
http://poj.org/problem?id=3304 给你几条线段 然后 让你找到一条直线让他在这条直线上的映射有一个重合点 如果有这条直线的话 这个重合的部分的两个端点一定是某两条线段的 ...
- 洛谷——P1262 间谍网络
P1262 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意 ...
- hdu6200 mustedge mustedge mustedge (并查集+dfs序树状数组)
题意 给定一个n个点m条边无向图(n,m<=1e5) 支持两个操作 1.添加一条边 2.询问点u到点v的所有路径中必经边的条数 操作数<=1e5 分析 第一眼看起来像是要动态维护无向图的边 ...
- java面向对象day01
前言: 1.首先我们要明白:万物皆对象.现实中存在的事物都是对象.而面向对象技术就是对客观事物进行抽象.2.而java语言是纯面向对象的的语言,它具有描述对象及其相互之间关系的语言成分.3.定义类和建 ...
- 转:Linux性能评测工具之一:gprof篇
1 简介 改进应用程序的性能是一项非常耗时耗力的工作,但是究竟程序中是哪些函数消耗掉了大部分执行时间,这通常都不是非常明显的.GNU 编译器工具包所提供了一种剖析工具 GNU profiler(gpr ...
- Simics 破解 转
http://www.eetop.cn/blog/html/28/1066428-type-bbs-view-myfav.html http://blog.sina.com.cn/s/blog_538 ...
- 基于sentry的前端错误监控日志系统(部署sentry服务器/前端项目部署)-让前端最快的定位到生产问题
背景 在这越来越发达的网络时代,web应用也是越来越复杂,尤其是前端的开发,也是越来越受重视. 所以在我们前端开发完成后,会有一些列的web应用的上线验证,如自测.QA测试.code review 等 ...