• 使用Layui上传图片,并进行压缩(非原创,证实可用)


    这边是html

    <div class="popBox pop_m"><span class="closePopBt">关闭</span>
        <div class="hr20"></div>
        <form class="layui-form" action="">
            <a href="javascript:void(0)" class="aLine margin_r15 uploadpic_btn">图片</a>            
            
                <div class="upload_piclist"> </div>
            </div>
            <div class="popBottomBt"> <a href="javascript:void(0)" class="button send_smit">发送</a> </div>
        </form>
    </div>
    

      

    贴上我自己的代码

    <script>
    function canvasDataURL(file, callback) { //压缩转化为base64
        var reader = new FileReader()
        reader.readAsDataURL(file)
        reader.onload = function (e) {
          const img = new Image()
          const quality = 0.5 // 图像质量
          const canvas = document.createElement('canvas')
          const drawer = canvas.getContext('2d')
          img.src = this.result
          img.onload = function () {
            canvas.width = img.width
            canvas.height = img.height
            drawer.drawImage(img, 0, 0, canvas.width, canvas.height)
            convertBase64UrlToBlob(canvas.toDataURL(file.type, quality), callback);
          }
        }
      }
     
      function convertBase64UrlToBlob(urlData, callback) { //将base64转化为文件格式
        const arr = urlData.split(',')
        const mime = arr[0].match(/:(.*?);/)[1]
        const bstr = atob(arr[1])
        let n = bstr.length
        const u8arr = new Uint8Array(n)
        while (n--) {
          u8arr[n] = bstr.charCodeAt(n)
        }
        callback(new Blob([u8arr], {
          type: mime
        }));
     }
        
        
    layui.use(['layer','upload'],function() {
        var form = layui.form
    	,upload = layui.upload;
    	
    	$(".closePopBt").on("click", function(){
    		var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
    		parent.layer.close(index); //再执行关闭        
    	});	
    	
      //多图片上传
    	var upload = layui.upload;
    	upload.render({
    		elem: '.uploadpic_btn',
    		url: '/workflow/comment/upload',
     		accept: 'images', //只允许传图片
    //		size: 10240, //限制文件大小,单位 KB
    		multiple: true,
                    auto:false,
                    choose:function(obj){
                        var files = obj.pushFile();
                        var filesArry = [];
                        for (var key in files) { //将上传的文件转为数组形式
                          filesArry.push(files[key])
                        }
                        var index = filesArry.length - 1;
                        var file = filesArry[index]; //获取最后选择的图片,即处理多选情况
    
                        if (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion.split(";")[1]
                            .replace(/[ ]/g, "").replace("MSIE", "")) < 9) {
                          return obj.upload(index, file)
                        }
                        canvasDataURL(file, function (blob) {
                          var aafile = new File([blob], file.name, {
                            type: file.type
                          })
                          var isLt1M;
                          if (file.size < aafile.size) {
                            isLt1M = file.size
                          } else {
                            isLt1M = aafile.size
                          }
    
                          if (isLt1M / 1024 / 1024 > 2) {
                            return layer.alert('图片压缩之后还是大于2M,请压缩之后上传!');
                          } else {
                            if (file.size < aafile.size) {
                              return obj.upload(index, file)
                            }
                            obj.upload(index, aafile)
                          }
                        })
                    },
    		before: function(obj) {
                        //预读本地文件示例,不支持ie8
    //                    obj.preview(function(index, file, result) {
    //                        
    //                    });
    		},
    		done: function(res) {
                        //上传完毕
                        $('.upload_piclist').append('<div class="uploadpic"><div class="pic"><img src="' + res.info.path_url + '" alt="' + res.info.title + '" class="layui-upload-img"></div><span attr_old_name='+res.info.title+' attr_new_name='+res.info.new_name+'  path='+res.info.path+' class="delpic_bt"></span></div>')
    		}
    	});
    

      

  • 相关阅读:
    批量插入数据&自定义分页器
    ajax
    Django 多对多表关系的三种创建方式
    Django ORM之F与Q查询
    Django ORM跨表查询&聚合、分组查询
    Django ORM多表操作
    Django ORM单表操作常用字段
    HashMap的容量大小增长原理(JDK1.6/1.7/1.8)
    80端口被占用
    中级视频地址
  • 原文地址:https://www.cnblogs.com/aoxueshou/p/11726397.html
Copyright © 2020-2023  润新知