• 从网络链接上获取文件流 进行file文件的创建


    从网络链接上获取文件流 进行file文件的创建

    目的:就是我们的修改某一个订单的时候,会需要返显出来, 但是就是给了一个链接,没有返回具体的文件处理。但是我们要是再需要上传一次的时候,我们就需要一个 file的文件

    处理方案:

    第一种:就是我们直接从那个网络链接上直接拉取下来,转成文件

    // 传进的参数就是一个 网络地址  最后会得到相应的转码
    // 实现的方案就是 使用xhr进行请求 规定好返回的格式blob 
    function getBase64(imgUrl) {
      window.URL = window.URL || window.webkitURL;
      var xhr = new XMLHttpRequest();
      xhr.open("get", imgUrl, true);
      // 至关重要
      xhr.responseType = "blob";
      xhr.onload = function () {
        if (this.status == 200) {
          //得到一个blob对象
          var blob = this.response;
          console.log("blob", blob)
          // 至关重要
          let oFileReader = new FileReader();
          oFileReader.onloadend = function (e) {
            // 此处拿到的已经是 base64的了
            let base64 = e.target.result;
            console.log("初次得到的转码》》》》》》》》》", base64)
          };
          oFileReader.readAsDataURL(blob);
         }
      }
      xhr.send();
    }
    
    // 我们将上边得到的base64 进行转码 就能得到file对象了,要是生成相应的文件内容不相同,自己在修改。
    base64ToFile(data) {
             
          // 将base64 的文件转换成file对象上传 atob将ascii码解析成binary数据
              let binary = atob(data.split(',')[1]);
              let mime = data.split(',')[0].match(/:(.*?);/)[1];
              let array = [];
              for (let i = 0; i < binary.length; i++) {
                array.push(binary.charCodeAt(i));
              }
              let fileData = new Blob([new Uint8Array(array)], {
                    type: mime,
                  });
     
              let file = new File([fileData], `${new Date().getTime()}.png`, { type: mime });
     
          return file;
     
    } 
    

    (测试用) 如果请求的是图片的 我们可以在请求成功之后拿到blob的形式的流,进行获取链接展示

     //====为了在页面显示图片====
          var img = document.createElement("img");
          img.onload = function (e) {
            window.URL.revokeObjectURL(img.src); // 清除释放
          };
          let src = window.URL.createObjectURL(blob);
          img.src = src
          //document.getElementById("container1").appendChild(img);
    //====为了在页面显示图片====
    

    第二种:要是文件是一张图片的话 我们可以使用canvas

    最后得到转码后 进行其它操作

    let imgSrc = "https://fastmarket.oss-cn-shenzhen.aliyuncs.com/oss/static/other/1/images/baseMap_index.jpg";
    
    //width、height调用时传入具体像素值,控制大小 ,不传则默认图像大小
    function getBase64Image(img, width, height) {
      var canvas = document.createElement("canvas");
      canvas.width = width ? width : img.width;
      canvas.height = height ? height : img.height;
      var ctx = canvas.getContext("2d");
      ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
      var dataURL = canvas.toDataURL();
      return dataURL;
    }
    function getCanvasBase64(img) {
      var image = new Image();
      //至关重要
      image.crossOrigin = '';
      image.src = img;
      //至关重要
      var deferred = $.Deferred();
      if (img) {
        image.onload = function () {
          deferred.resolve(getBase64Image(image));//将base64传给done上传处理
          //document.getElementById("container2").appendChild(image);
        }
        return deferred.promise();//问题要让onload完成后再return sessionStorage['imgTest']
      }
    }
    getCanvasBase64(imgSrc)
      .then(function (base64) {
        // 这里拿到的是转换后的base64地址,可以做其他操作
        console.log("方式二》》》》》》》》》",base64);
      }, function (err) {
        console.log(err);
      });
    
  • 相关阅读:
    django 日志窜打问题
    获取f5 应用并发数情况返回JSON
    埋在 MySQL 数据库应用中的17个关键问题!
    python 模拟发送JSON数据
    python 模拟 curx -u
    分区表和全局索引
    Oracle 普通表转分区表
    阿里云吕漫漪:深度解析国内首个云原生数据库POLARDB的“王者荣耀”
    哪些顾虑会影响企业采用云桌面?
    哪些顾虑会影响企业采用云桌面?
  • 原文地址:https://www.cnblogs.com/tcz1018/p/14101744.html
Copyright © 2020-2023  润新知