手头上的这个项目主要是在微信内运行的一个网站,需要用户上传手机内的照片,而现在手机照片尺寸越来越大,直接上传的话的确上传进度慢影响用户体验而且也会给服务器增加压力,所以利用H5的新特性压缩后上传不失为一良策。

最后选用的是localResizeImg进行压缩上传,简单易上手,核心代码部分如下。

前台部分

<input id="upload" type="file" name="upload" multiple accept="image/*;capture=camcorder">
js部分:
var photoIdx=;
document.querySelector('#upload').addEventListener('change', function () {
  var filesCount = this.files.length;
  if(filesCount>) return zalert('最多只能上传18张照片');
  var uploadedCount = $('.img-preview-box img').size();
  if(uploadedCount>) return zalert('最多只能上传18张照片');
  var imageType = /^image\//;
  var container = $('.img-preview-box');
  if(filesCount> && imageType.test(this.files[].type)) container.css({'min-height':'110px','overflow':'visible'})
  
  for(var i=,file;i<filesCount,file=this.files[i];i++){
    if (!imageType.test(file.type)) { return zalert("上传的图片格式不正确,请重新选择")}
    photoIdx++;
    lrz(file).then(function (rst) {
      container.append('<div class="uploadimg-box"><img src="'+ rst.base64 +'"/><div class="del-uploadimg-box" title="移除该照片" data-id="'+ photoIdx +'"></div></div>');
      return rst;
}).then(function (rst) {
      rst.formData.append('fileLen', rst.fileLen);
      $.ajax({
          url: '/h5/photo/upload',
          data: rst.formData,
          processData: false,
          contentType: false,
          type: 'POST',
          success: function (data) {
            var photos=$('#uploadedPhotos').val();
            $('#uploadedPhotos').val(photos+','+ data.url);             
          }
      });   
    }).catch(function (err) {}).always(function () {});
  }
});
 
PHP后台部分:
    public function upload()
{
$config = [
'size' => 2097152,
'ext' => 'jpg,gif,png,bmp'
]; $file = $this->request->file('file'); $upload_path = str_replace('\\', '/', ROOT_PATH . 'public/uploads/photos');
$save_path = '/public/uploads/photos/';
$info = $file->validate($config)->move($upload_path); if ($info) {
$result = [
'error' => 0,
'url' => str_replace('\\', '/', $save_path . $info->getSaveName())
];
} else {
$result = [
'error' => 1,
'msg' => $file->getError()
];
} return json($result);
}
 

移动端H5上传图片并压缩上传的更多相关文章

  1. 在浏览器端用H5实现图片压缩上传

    一.需求的场景: 在我们的需求中需要有一个在手机浏览器端,用户实现上传证件照片的功能,我们第一版上了一个最简版,直接让用户在本地选择图片,然后上传到公司公共的服务器上. 功能实现后我们发现一个问题,公 ...

  2. PC端 H5实现拍照并上传

    <!DOCTYPE HTML><html><head> <meta charset="UTF-8"> <meta name=& ...

  3. 基于vue + axios + lrz.js 微信端图片压缩上传

    业务场景 微信端项目是基于Vux + Axios构建的,关于图片上传的业务场景有以下几点需求: 1.单张图片上传(如个人头像,实名认证等业务) 2.多张图片上传(如某类工单记录) 3.上传图片时期望能 ...

  4. vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式

    进入正题 1. PC端调用摄像头拍照上传base64格式到后台,这个没什么花里胡哨的骚操作,直接看代码 (canvas + video) <template> <div> &l ...

  5. 纯原生js移动端图片压缩上传插件

    前段时间,同事又来咨询一个问题了,说手机端动不动拍照就好几M高清大图,上传服务器太慢,问问我有没有可以压缩图片并上传的js插件,当然手头上没有,别慌,我去网上搜一搜. 结果呢,呵呵...诶~又全是基于 ...

  6. Vue directive自定义指令+canvas实现H5图片压缩上传-Base64格式

    前言 最近优化项目-手机拍照图片太大,回显速度比较慢,使用了vue的自定义指令实现H5压缩上传base64格式的图片 canvas自定义指令 Vue.directive("canvas&qu ...

  7. 基于H5+ API手机相册图片压缩上传

    // 母函数 function App(){} /** * 图片压缩,默认同比例压缩 * @param {Object} path * pc端传入的路径可以为相对路径,但是在移动端上必须传入的路径是照 ...

  8. base64 压缩上传上传图片

    @{ ViewBag.Title = "dddddddd"; Layout = "~/Areas/Wap/Views/Shared/_Head.cshtml"; ...

  9. 深入研究HTML5实现图片压缩上传

    上篇文章中提到移动端上传图片,我们知道现在流量还是挺贵的,手机的像素是越来越高,拍个照动不动就是好几M,伤不起.虽然客户端可以轻轻松松实现图片压缩再上传,但是我们的应用还可能在浏览器里面打开,怎么办呢 ...

随机推荐

  1. ubuntu安装和查看已安装软件

    说明:由于图形化界面方法(如Add/Remove... 和Synaptic Package Manageer)比较简单,所以这里主要总结在终端通过命令行方式进行的软件包安装.卸载和删除的方法. 一.U ...

  2. 团队计划第二期Backlog

    团队计划第二期Backlog 一. 计划会议过程        今天中午我们小组就我们团队开发第二阶段的冲刺召开计划会议,总结了第一阶段开发的问题.不足和经验教训,然后对本次冲刺计划进行了合理的规划和 ...

  3. Access连接数据源配置(新手必知)

    今天要连接Access时发现win7 64位旗舰版控制面板中管理工具下的数据源(ODBC)配置竟然只有SQLServer的驱动,其他的都没有了,这可不好玩!上网百度了一番,有人也遇过这样的问题,我在此 ...

  4. HDU 5229 ZCC loves strings 博弈

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5229 bc:http://bestcoder.hdu.edu.cn/contests/con ...

  5. HDU 5391Z ball in Tina Town 数论

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5391 bc:  http://bestcoder.hdu.edu.cn/contests/c ...

  6. virtual judge 本地部署方案

    这是一种将自己的电脑当作服务器来部署一个vj的方法,我也是参考前辈们的做法稍作了改动,如果在服务器上部署的话需要在细节上稍作改动: 一.什么是Virtual Judge? vj的工作原理什么?  vj ...

  7. PHP与类有关的几个魔术方法

    与类有关的其他魔术方法 序列化与反序列化技术 含义: 序列化: 就是将一个变量所代表的“内存”数据,转换为“字符串”形式并持久保存在硬盘上的一种做法. 反序列化: 就是将序列化之后保存在硬盘上的“字符 ...

  8. Mysql 学习之 SQL的执行顺序

    mysql的json查询:                                                                       1.一条普通的SQL SELEC ...

  9. HDU4497——GCD and LCM

    这个题目挺不错的,看到是通化邀请赛的题目,是一个很综合的数论题目. 是这样的,给你三个数的GCD和LCM,现在要你求出这三个数有多少种可能的情况. 对于是否存在这个问题,直接看 LCM%GCD是否为0 ...

  10. stm32f4xx系统总线架构

    最近有人在STMCU社区网站咨询如下问题: 由于实验需要,要用到STM32F407的两个DMA并用定时器触发,在使用过程中发现DMA1无法把GPIO的IDR上的数据传输到内存,调试过程中出现DMA1的 ...