工作中开发一个评价功能,需要上传拍照的图片,后台使用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. BZOJ1739: [Usaco2005 mar]Space Elevator 太空电梯

    n<=400个东西,每个东西有高度<=100,这种东西在堆放过程中不得超过的最大高度<=40000,以及每个东西的个数<=10,求最高能堆多高. 算了下背包复杂度不太对然后开了 ...

  2. windows7 下安装使用memcached(二)

    Memcached 安装使用 本地环境:Windows7 64位web环境:wamp集成环境,php版本:PHP Version 7.1.17 学习参考网站: RUNOOB.COM官网  http:/ ...

  3. poj1330+hdu2586 LCA离线算法

    整整花了一天学习了LCA,tarjan的离线算法,就切了2个题. 第一题,给一棵树,一次查询,求LCA.2DFS+并查集,利用深度优先的特点,回溯的时候U和U的子孙的LCA是U,U和U的兄弟结点的子孙 ...

  4. POJ 3461 字符串出现次数 && HDU1711 字符串第一次出现的位置 模板题

      Oulipo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 48387   Accepted: 19261 Descri ...

  5. EF关联

    public CustomerMap() { this.ToTable("Customer"); this.HasKey(c => c.Id); this.Property( ...

  6. sublime text 3(Build 3103)最新注冊码

    原来注冊过的sublime text 3近期更新了.没想到原来的注冊码就失效了,只是我找到了最新的注冊码(Build 3103),与大家分享一下(第一个亲測可用). -– BEGIN LICENSE ...

  7. HTML5 <template>标签元素简介

    一.HTML5 template元素初面 <template>元素,基本上可以确定是2013年才出现的.干嘛用的呢,顾名思意,就是用来声明是“模板元素”. 目前,我们在HTML中嵌入模板H ...

  8. Shell 脚本小试牛刀(5) -- 超便捷脚本之高速ssh 登录其它主机

    假设你也是以Linux 为工作环境的童鞋,那么此文真是捷报!由于我的学习/工作中(特别是近期玩耍树莓派)常常会使用到ssh 登录其它主机,而每次使用ssh 登录都须要输入老长一大串让我非常烦.所以我写 ...

  9. CentOS 7下安装Logstash ELK Stack 日志管理系统(下)

    修改防火墙,对外开放tcp/5601 [root@elk elk]# firewall-cmd --permanent --add-port=5601/tcpSuccess[root@elk elk] ...

  10. gbk转utf-8 iconv 编码转换

    linux以下有时候 字符须要进行编码转换(爬虫将gbk转为utf-8编码...).一般能够选择iconv函数. 终端以下  输入 man 3 iconv 得到  iconv函数的用法. 个人看习惯了 ...