• FileReader获取上传图片的宽高


    前言


    input upload 图片上传,经常要判断上传图片的宽高。除了运用一些上传插件可以获取。原生的上传方式也可以获取,下面就说一下如何获取上传图片的宽高。

    以饿了么上传插件为例


    <el-upload
                      drag
                      :action="/upload"
                      accept="image/png, image/jpeg, image/gif, image/jpg"
                      :headers="headers"
                      :on-success ="successUploads"
                      :before-upload ="uploadyanzheng"
                      name="image"
                      multiple>
                      <i class="el-icon-upload"></i>
                      <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
      </el-upload>

    上传前的验证:

     uploadyanzheng(file) {
          let _this = this
        //普通的判断可以用return false
          // 获取文件尺寸,判断尺寸在不在规定范围之内
          return new Promise(function(resolve, reject) {
            let reader = new FileReader()
            reader.readAsDataURL(file)
            reader.onload = function(theFile) {
              let image = new Image()
              image.src = theFile.target.result
              image.onload = function() {
                let csize = `${this.width}*${this.height}`
                if (!_this.creativeSize.includes(csize)) {//this.creativeSize是可以上传的尺寸列表数组
                  _this.$message.error(`${file.name}尺寸不对,请重新上传!`)
                  reject('图片尺寸不对')
                } else {
                  file.width = this.width
                  file.height = this.height
                  resolve(file)
                }
              }
            }
          })
        },
    

     

    普通input file 上传


    <input type="file" size="20" autocomplete="off" id="upload_img" name="Uploadfile">
    
    var MyTest = document.getElementById("upload_img").files[0];
    var reader = new FileReader();
    reader.readAsDataURL(MyTest);
    reader.onload = function(theFile) {
      var image = new Image();
       image.src = theFile.target.result;
       image.onload = function() {
         alert("图片的宽度为"+this.width+",长度为"+this.height);
       };
    };
    

      

     

    FileReader介绍


    FileReader()是一个构造函数,关于该函数的详细介绍,可以查看:https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader

    用法-访问选择的文件


    可以通过

    <input type="file" id="input" multiple onchange="handleFiles(this.files)">
    
     <div id="haorooms"></div>
    
    function handleFiles(files) {
      for (var i = 0; i < files.length; i++) {
        var file = files[i];
        var imageType = /^image//;
    
        if (!imageType.test(file.type)) {
          continue;
        }
    
        var img = document.createElement("img");
        img.classList.add("obj");
        img.file = file;
       $("#haorooms").appendChild(img); // 把上传的图片添加到展示的div中
    
        var reader = new FileReader();
        reader.onload = (function(aImg) { return function(e) { aImg.src = e.target.result; }; })(img);
        reader.readAsDataURL(file);
      }
    }
    

    关于上传


    关于图片上传,我之前也有类似文章,input file 文件上传,js控制上传文件的大小和格式 及accept设置

    css input[type=file] 样式美化

    FileReader预览上传图片(2018-09-21补充)


    这个案例是参考张鑫旭的直接剪切板粘贴上传图片的前端JS实现, 这里也用到了FileReader,所以在这里补充一下:

    HTML代码:

    <div id="preview"></div>
    <p id="log"></p>
    

    JS代码:

    document.addEventListener('paste', function (event) {
        var items = (event.clipboardData || window.clipboardData).items;
        var file = null;
        if (items && items.length) {
            // 搜索剪切板items
            for (var i = 0; i < items.length; i++) {
                if (items[i].type.indexOf('image') !== -1) {
                    file = items[i].getAsFile();
                    break;
                }
            }
        } else {
            log.innerHTML = '<span style="color:red;">当前浏览器不支持</span>';
            return;
        }
        if (!file) {
            log.innerHTML = '<span style="color:red;">粘贴内容非图片</span>';
            return;
        }
        // 此时file就是我们的剪切板中的图片对象
        // 如果需要预览,可以执行下面代码
        var reader = new FileReader()
        reader.onload = function(event) {
            preview.innerHTML = '<img src="' + event.target.result + '" class="upload-image">';
        }
        reader.readAsDataURL(file);
        // 如果不需要预览,上面这段可以忽略
    
        // 这里是上传
        var xhr = new XMLHttpRequest();
        // 上传进度
        if (xhr.upload) {
            xhr.upload.addEventListener('progress', function (event) {
                log.innerHTML = '正在上传,进度:' + Math.round(100 * event.loaded / event.total) / 100 + '%';
            }, false);
        }
        // 上传结束
        xhr.onload = function () {
            var responseText = xhr.responseText;
            log.innerHTML = '上传成功,地址是:' + responseText;
        };
        xhr.onerror = function () {
            log.innerHTML = '<span style="color:red;">网络异常,上传失败</span>';
        };
        xhr.open('POST', './upload.php', true);
        xhr.setRequestHeader('FILENAME', encodeURIComponent(file.name));
        xhr.send(file);
    });
    

      

      

      

      

      

      

  • 相关阅读:
    第六章.md
    记录一道字节面试题引出的this指向问题
    记录Vue常问问题整合
    记录Event Loop事件循环、微任务、宏任务
    简单的小问题
    添加汇总行1(Power Query)
    被筛选排除在外的最后一行
    查找指定颜色
    Power Query示例汇总
    动态变化的求和区域
  • 原文地址:https://www.cnblogs.com/AaronLs/p/10240924.html
Copyright © 2020-2023  润新知