继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

前端“花式”下载 文件大法 小结

SOHO树叶
关注TA
已关注
手记 56
粉丝 61
获赞 656

数据源:Blob

function saveFileToBlob(blob, tagFileName, fileType) {
    var downloadElement = document.createElement('a');
    var href = window.URL.createObjectURL(blob); //创建下载的链接
    downloadElement.href = href;
    downloadElement.download = (tagFileName ? tagFileName : moment(new Date().getTime()).format('YYYYMMDDhhmmss')) + '.' + fileType; //下载后文件名
    document.body.appendChild(downloadElement);
    downloadElement.click(); //点击下载
    document.body.removeChild(downloadElement); //下载完成后,移除元素
    window.URL.revokeObjectURL(href);
}

数据源:Base64

function saveFileToBase64(urlData, type) {
    // 去掉url的头,并转化为byte
    var bytes = window.atob(urlData);
    // 处理异常,将ascii码小于0的转换为大于0
    var ab = new ArrayBuffer(bytes.length);
    // 生成视图(直接针对内存):8位无符号整数,长度1个字节
    var ia = new Uint8Array(ab);
    for (var i = 0; i < bytes.length; i++) {
      ia[i] = bytes.charCodeAt(i);
    }
    var blob = new Blob([ab], {
      type: 'application/json'
    });
    //引用上文下载二进制流的方法
    saveFileToBlob(blob, '', type);
}

数据源:Link

function saveFileToLink(url, fileName, type, fn) {
    var xhr = new XMLHttpRequest();
    url = url.includes('https:') ? url.replace('https:', '') : url.replace('http:', '');
    xhr.open('get', url, true);
    xhr.setRequestHeader('Content-Type', 'application/' + type);
    xhr.setRequestHeader("If-Modified-Since", "0");
    xhr.responseType = "blob";
    xhr.onprogress = function (e) {
      //文件下载进度
      if (fn && typeof fn == 'function') {
        fn(e); //监听文件下载进度;
      }
    }, xhr.onload = function () {
      if (this.status == 200) {
        //接受二进制文件流
        var blob = this.response;
        saveFileToBlob(blob, fileName, type);
      }
    }, xhr.send();
}


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP