Comparing version 1.1.2 to 1.2.0
84
index.js
@@ -1,83 +0,1 @@ | ||
/** | ||
* @param {Str} fileUrl | ||
* @param {Str} fileName | ||
* @param {Obj} opts | ||
* | ||
*/ | ||
export default (function (fileUrl, fileName) { | ||
var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; | ||
if (!fileUrl) throw new Error("fileUrl is required"); | ||
if (!fileName) throw new Error("fileName is required"); | ||
function update_progress(e) { | ||
if (e.lengthComputable) { | ||
var percentage = Math.round(e.loaded / e.total * 100); | ||
if (typeof opts.progress === "function") { | ||
opts.progress(e); | ||
} | ||
} else {// console.log( | ||
// "Unable to compute progress information since the total size is unknown" | ||
// ); | ||
} | ||
} | ||
function transfer_complete(e) {// if (typeof opts.complete === "function") { | ||
// console.log("The transfer is complete."); | ||
// opts.complete(e); | ||
// } | ||
} | ||
function transfer_failed() { | ||
var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.event; | ||
if (typeof opts.failed === "function") { | ||
// console.log("An error occurred while transferring the file."); | ||
opts.failed(e); | ||
} | ||
} | ||
function transfer_canceled(e) { | ||
if (typeof opts.canceled === "function") { | ||
// console.log("The transfer has been canceled by the user."); | ||
opts.canceled(e); | ||
} | ||
} | ||
var xhr = new XMLHttpRequest(); | ||
xhr.onprogress = update_progress; | ||
xhr.addEventListener("load", transfer_complete, false); | ||
xhr.addEventListener("error", transfer_failed, false); | ||
xhr.addEventListener("abort", transfer_canceled, false); | ||
xhr.onreadystatechange = function () { | ||
if (xhr.readyState == 4) { | ||
if (xhr.status == 200) { | ||
var blob = xhr.response; | ||
var reader = new FileReader(); | ||
reader.readAsDataURL(blob); | ||
reader.onload = function (e) { | ||
var elink = document.createElement("a"); | ||
elink.download = fileName; | ||
elink.style.display = "none"; | ||
elink.href = e.target.result; | ||
document.body.appendChild(elink); | ||
elink.click(); | ||
document.body.removeChild(elink); | ||
if (typeof opts.complete === "function") { | ||
// console.log("The transfer is complete."); | ||
opts.complete(e); | ||
} | ||
}; | ||
} else { | ||
transfer_failed(); | ||
} | ||
} | ||
}; | ||
xhr.open("GET", fileUrl, true); | ||
xhr.responseType = "blob"; | ||
xhr.send(); | ||
}); | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).fdownload=t()}(this,function(){"use strict";return function(e,r){var i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};if(!e)throw new Error("fileUrl is required");if(!r)throw new Error("fileName is required");function n(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:window.event;"function"==typeof i.failed&&i.failed(e)}var o=new XMLHttpRequest;o.onprogress=function(e){e.lengthComputable&&(Math.round(e.loaded/e.total*100),"function"==typeof i.progress&&i.progress(e))},o.addEventListener("load",function(e){},!1),o.addEventListener("error",n,!1),o.addEventListener("abort",function(e){"function"==typeof i.canceled&&i.canceled(e)},!1),o.onreadystatechange=function(){if(4==o.readyState)if(200==o.status){var e=o.response,t=new FileReader;t.onload=function(e){var t=function(e){for(var t=atob(e.split(",")[1]),n=t.length,o=new Uint8Array(n),r=e.split(",")[0].split(":")[1].split(";")[0],i=0;i<n;i++)o[i]=t.charCodeAt(i);return new Blob([o],{type:r})}(e.target.result),n=URL.createObjectURL(t),o=document.createElement("a");o.download=r,o.style.display="none",o.href=n,document.body.appendChild(o),o.click(),setTimeout(function(){URL.revokeObjectURL(n)},4e4),document.body.removeChild(o),"function"==typeof i.complete&&i.complete(e)},t.readAsDataURL(e)}else n()},o.open("GET",e),o.responseType="blob",o.send()}}); |
{ | ||
"name": "fdownload", | ||
"version": "1.1.2", | ||
"version": "1.2.0", | ||
"description": "文件下载", | ||
@@ -11,3 +11,3 @@ "main": "index.js", | ||
"dev": "babel src --watch --out-dir .", | ||
"build": "babel src --out-dir ." | ||
"build": "rollup -c" | ||
}, | ||
@@ -14,0 +14,0 @@ "devDependencies": { |
@@ -30,3 +30,3 @@ /** | ||
} | ||
function transfer_failed(e=window.event) { | ||
function transfer_failed(e = window.event) { | ||
if (typeof opts.failed === "function") { | ||
@@ -43,2 +43,19 @@ // console.log("An error occurred while transferring the file."); | ||
} | ||
function dataURIToBlob(dataURI) { | ||
var binStr = atob(dataURI.split(",")[1]), | ||
len = binStr.length, | ||
arr = new Uint8Array(len), | ||
mimeString = dataURI | ||
.split(",")[0] | ||
.split(":")[1] | ||
.split(";")[0]; | ||
for (var i = 0; i < len; i++) { | ||
arr[i] = binStr.charCodeAt(i); | ||
} | ||
return new Blob([arr], { | ||
type: mimeString | ||
}); | ||
} | ||
const xhr = new XMLHttpRequest(); | ||
@@ -54,17 +71,19 @@ xhr.onprogress = update_progress; | ||
const reader = new FileReader(); | ||
reader.readAsDataURL(blob); | ||
reader.onload = function(e) { | ||
const dataBlob = dataURIToBlob(e.target.result); | ||
const url = URL.createObjectURL(dataBlob); | ||
const elink = document.createElement("a"); | ||
elink.download = fileName; | ||
elink.style.display = "none"; | ||
elink.href = e.target.result; | ||
elink.href = url; | ||
document.body.appendChild(elink); | ||
elink.click(); | ||
setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) ;// 40s revokeObjectURL | ||
document.body.removeChild(elink); | ||
if (typeof opts.complete === "function") { | ||
// console.log("The transfer is complete."); | ||
opts.complete(e); | ||
} | ||
}; | ||
}else{ | ||
reader.readAsDataURL(blob); | ||
} else { | ||
transfer_failed(); | ||
@@ -74,5 +93,8 @@ } | ||
}; | ||
xhr.open("GET", fileUrl, true); | ||
// xhr.onload = function () { | ||
// } | ||
xhr.open("GET", fileUrl); | ||
xhr.responseType = "blob"; | ||
xhr.send(); | ||
}; |
90109
118