zoukankan      html  css  js  c++  java
  • 移动端H5上传图片并压缩上传

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

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

    前台部分

    <input id="upload" type="file" name="upload" multiple accept="image/*;capture=camcorder">
    js部分:
    var photoIdx=0;
    document.querySelector('#upload').addEventListener('change', function () {
      var filesCount = this.files.length;
      if(filesCount>18) return zalert('最多只能上传18张照片');

      var uploadedCount = $('.img-preview-box img').size();
      if(uploadedCount>17) return zalert('最多只能上传18张照片');
      var imageType = /^image//;
      var container = $('.img-preview-box');

      if(filesCount>0 && imageType.test(this.files[0].type)) container.css({'min-height':'110px','overflow':'visible'})
      
      for(var i=0,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);
        }
     
  • 相关阅读:
    ubuntu查看安装的pytorch/cuda版本
    go不使用工具包将大写字符转成小写字符的方法
    使用Nexus搭建Maven私服
    maven setting.xml配置说明
    maven的仓库、生命周期与插件
    maven项目搭建
    maven之详解继承与聚合
    Maven核心概念之依赖,聚合与继承
    commons-logging日志系统
    新建我的 第一个maven项目
  • 原文地址:https://www.cnblogs.com/s1ihome/p/7648915.html
Copyright © 2011-2022 走看看