工作中开发一个评价功能,需要上传拍照的图片,后台使用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上传图片的更多相关文章

  1. h5上传图片

    1.如何在H5上传图片 使用FileReader 2.FileReader接口 传图片我们只用到readAsDataURL 3.FileReader接口事件 传图片我们只用到onload 4.如何使用 ...

  2. angular下H5上传图片(可多张上传)

    最近做的项目中用到了angular下上传图片功能,在做的过程中遇到了许多问题,最终都得以解决 angular上传时和普通上传时过程差不多,只不过是要不一些东西转化为angular的东西. 1.ng-f ...

  3. H5上传图片并使用canvas制作海报

    马上就要"十一"国庆节了,又恰逢公司已经三周岁了,所以市场部和产品共同策划了一个"正青春,共成长"的主题代言活动,准备在国庆节以及中秋节期间让公司员工和用户为公 ...

  4. H5上传图片之canvas

    H5上传图片之canvas,使用canvas处理压缩图片再上传 html代码: <form action="" method="post"> < ...

  5. springMVC中上传图片

    上传图片,很常见的问题,基本每个人都会遇到,但是个人认为在springMVC中上传图片相对来说是比较简单的,因为框架已经帮我们做好了许多事情. 这篇文章所用的环境:spring4.3.3 .jdk1. ...

  6. Maven+SpringMVC+MyBatis 上传图片

    上传文件我一直都觉得很难,好吧,所有涉及文件操作的我都觉得不容易.然后今天尝试了从网页上传图片保存到服务器.这个例子的前提是搭建好了服务器端框架:Maven+Spring MVC+MyBatis.当然 ...

  7. HTML5+Spring-MVC实现上传图片本地保存

    以下就是具体的代码: 1.在jsp页面中的代码: <span style="font-size:24px;"><form method="post&qu ...

  8. h5上传图片及预览

    第一次做图片上传,记录一些问题. 1,图片的base64编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址.而网页上的每一个图片,都是需要消耗一个http请求下载而来的,使用base ...

  9. springmvc处理上传图片代码(校验图片尺寸、图片大小)

    package com.maizuo.web.controller; import com.maizuo.domain.Result; import com.maizuo.util.Constants ...

随机推荐

  1. 爱在心中(codevs 2822)

    题目描述 Description “每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动.爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home.” 在爱的国度 ...

  2. Jquery操作事件

    1.文档加载事件 2.DOM单击双击事件 3.DOM获得焦点,失去焦点问题 4.DOM鼠标移入,移出事件 <!DOCTYPE html> <html> <head> ...

  3. 七天从零基础学习android(1)--配置环境

    在写这篇文的时候android开发经验还是0,是一个萌新,这是一篇记录一个萌新从零android编程基础到能编写一个记账本的开发过程(至少我是这样美好的希望着的) 首先因为是没有开发基础的,直接上百度 ...

  4. .NET作品集:基于svn 的.net 持续集成工具

    作品背景 这个.net 持续集成作品还是在2014年的时候从事.net 软件项目开发的时候做的,当时部门还用着vs2008用vb.net做项目(现在也是),项目代码极混乱,版本工具用的vss,而且用的 ...

  5. sendEmail实现邮件报警发送

    安装wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz tar -xf sendEmail-v ...

  6. 【网络】TCP协议

    一.概述 主要特点: 1)面向连接的运输层协议 2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一) 3)TCP提供可靠交付的服务 4)TCP提供全双工通信 5)面向字节流:T ...

  7. topcoder srm 550

    div1 250pt: 题意:有个机器人,从某一点出发,他只有碰到地形边缘或者碰到走过的点时才会改变运动方向,然后接着走,现在给出他的运动轨迹,判断他的运动是否合法,如果合法的话,那么整个地形的最小面 ...

  8. CentOS 7.0安装Zimbra 8.6邮件服务器

    Zimbra的核心产品是Zimbra协作套件(Zimbra Collaboration Suite,简称ZCS). 系统:Centos7 ip地址:192.168.127.131 安装前准备 1.关闭 ...

  9. VC++ error C1083 无法打开包括文件 fstream.h,iostream.h怎么办

    1 如下图所示,VS中不支持iostream.h和fstream.h的说法   2 改成下面三行就可以编译通过了 #include<iostream> #include <fstre ...

  10. SGU - 186 - The Chain (贪心)

    186. The Chain time limit per test: 0.25 sec. memory limit per test: 4096 KB input: standard input o ...