UNPKG

@ylz/plugins

Version:

ylz plugins

90 lines (74 loc) 2.62 kB
/* * Copyright © 2019-2019 chenwenbin * Released under the MIT License. */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global['file-download'] = factory()); }(this, function () { 'use strict'; /** * 根据后台接口文件流下载 * @param {*} data * @param {*} filename * @param {*} mime * @param {*} bom */ var downloadByData = function downloadByData(data, filename, mime, bom) { var blobData = typeof bom !== 'undefined' ? [bom, data] : [data]; var blob = new Blob(blobData, { type: mime || 'application/octet-stream' }); if (typeof window.navigator.msSaveBlob !== 'undefined') { window.navigator.msSaveBlob(blob, filename); } else { var blobURL = window.URL.createObjectURL(blob); var tempLink = document.createElement('a'); tempLink.style.display = 'none'; tempLink.href = blobURL; tempLink.setAttribute('download', filename); if (typeof tempLink.download === 'undefined') { tempLink.setAttribute('target', '_blank'); } document.body.appendChild(tempLink); tempLink.click(); document.body.removeChild(tempLink); window.URL.revokeObjectURL(blobURL); } }; /** * 根据文件地址下载文件 * @param {*} sUrl */ var downloadByUrl = function downloadByUrl(sUrl) { var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '_self'; var isChrome = window.navigator.userAgent.toLowerCase().indexOf('chrome') > -1; var isSafari = window.navigator.userAgent.toLowerCase().indexOf('safari') > -1; if (/(iP)/g.test(window.navigator.userAgent)) { console.error('您的浏览器不支持下载!'); return false; } if (isChrome || isSafari) { var link = document.createElement('a'); link.href = sUrl; link.target = target; if (link.download !== undefined) { var fileName = sUrl.substring(sUrl.lastIndexOf('/') + 1, sUrl.length); link.download = fileName; } if (document.createEvent) { var e = document.createEvent('MouseEvents'); e.initEvent('click', true, true); link.dispatchEvent(e); return true; } } if (sUrl.indexOf('?') === -1) { sUrl += '?download'; } window.open(sUrl, target); return true; }; var index = { downloadByData: downloadByData, downloadByUrl: downloadByUrl }; return index; }));