How to get loading progress for an html BLOB with javascript
Basically what I'm trying to do is download a file (around 10mb) and show progress percentage on page for the download progress. I can't use the normal html attribute download="filename.jpg" because the file is not hosted on the same domain. Chrome won't allow cross domain downloads anymore. My workaround for this is loading then downloading the file as a BLOB object via javascript. I have this working however I need to figure out a way to get the progress percentage of the download and display it on the page or console.log(progress). I have my code attached. If someone could please help me out on this I would appreciate it.
#downloadButton {
background:#000;
color:#FFF;
padding:10px;
cursor:pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<div id="downloadButton">
Click here to download file
</div>
<script>
function forceDownload(blob, filename) {
var a = document.createElement('a');
a.download = filename;
a.href = blob;
a.click();
}
// Current blob size limit is around 500MB for browsers
function downloadResource(url, filename) {
if (!filename) filename = url.split('\').pop().split('/').pop();
if (url.indexOf(".zip") !== -1 || url.indexOf(".rar") !== -1) {
$("#downloadButton").removeClass("loading");
forceDownload(url, filename);
} else {
fetch(url, {
headers: new Headers({
'Origin': location.origin
}),
mode: 'cors'
})
.then(response => response.blob())
.then(blob => {
let blobUrl = window.URL.createObjectURL(blob);
$("#downloadButton").removeClass("loading");
forceDownload(blobUrl, filename);
})
.catch(e => {
$("#downloadButton").removeClass("loading");
$("#downloadButton").addClass("error");
console.error(e);
});
}
}
$("#downloadButton").click(function() {
$("#downloadButton").addClass("loading");
$('<div id="notification"><span>Starting download...</span></div>').prependTo('body');
setTimeout(function() {$("#notification").fadeOut()}, 6000);
downloadResource("https://share.dmca.gripe/a7Bcp5j4zSRL9WIV.m4a","audio.m4a");
});
//]]>
</script>
javascript html blob
add a comment |
Basically what I'm trying to do is download a file (around 10mb) and show progress percentage on page for the download progress. I can't use the normal html attribute download="filename.jpg" because the file is not hosted on the same domain. Chrome won't allow cross domain downloads anymore. My workaround for this is loading then downloading the file as a BLOB object via javascript. I have this working however I need to figure out a way to get the progress percentage of the download and display it on the page or console.log(progress). I have my code attached. If someone could please help me out on this I would appreciate it.
#downloadButton {
background:#000;
color:#FFF;
padding:10px;
cursor:pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<div id="downloadButton">
Click here to download file
</div>
<script>
function forceDownload(blob, filename) {
var a = document.createElement('a');
a.download = filename;
a.href = blob;
a.click();
}
// Current blob size limit is around 500MB for browsers
function downloadResource(url, filename) {
if (!filename) filename = url.split('\').pop().split('/').pop();
if (url.indexOf(".zip") !== -1 || url.indexOf(".rar") !== -1) {
$("#downloadButton").removeClass("loading");
forceDownload(url, filename);
} else {
fetch(url, {
headers: new Headers({
'Origin': location.origin
}),
mode: 'cors'
})
.then(response => response.blob())
.then(blob => {
let blobUrl = window.URL.createObjectURL(blob);
$("#downloadButton").removeClass("loading");
forceDownload(blobUrl, filename);
})
.catch(e => {
$("#downloadButton").removeClass("loading");
$("#downloadButton").addClass("error");
console.error(e);
});
}
}
$("#downloadButton").click(function() {
$("#downloadButton").addClass("loading");
$('<div id="notification"><span>Starting download...</span></div>').prependTo('body');
setTimeout(function() {$("#notification").fadeOut()}, 6000);
downloadResource("https://share.dmca.gripe/a7Bcp5j4zSRL9WIV.m4a","audio.m4a");
});
//]]>
</script>
javascript html blob
add a comment |
Basically what I'm trying to do is download a file (around 10mb) and show progress percentage on page for the download progress. I can't use the normal html attribute download="filename.jpg" because the file is not hosted on the same domain. Chrome won't allow cross domain downloads anymore. My workaround for this is loading then downloading the file as a BLOB object via javascript. I have this working however I need to figure out a way to get the progress percentage of the download and display it on the page or console.log(progress). I have my code attached. If someone could please help me out on this I would appreciate it.
#downloadButton {
background:#000;
color:#FFF;
padding:10px;
cursor:pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<div id="downloadButton">
Click here to download file
</div>
<script>
function forceDownload(blob, filename) {
var a = document.createElement('a');
a.download = filename;
a.href = blob;
a.click();
}
// Current blob size limit is around 500MB for browsers
function downloadResource(url, filename) {
if (!filename) filename = url.split('\').pop().split('/').pop();
if (url.indexOf(".zip") !== -1 || url.indexOf(".rar") !== -1) {
$("#downloadButton").removeClass("loading");
forceDownload(url, filename);
} else {
fetch(url, {
headers: new Headers({
'Origin': location.origin
}),
mode: 'cors'
})
.then(response => response.blob())
.then(blob => {
let blobUrl = window.URL.createObjectURL(blob);
$("#downloadButton").removeClass("loading");
forceDownload(blobUrl, filename);
})
.catch(e => {
$("#downloadButton").removeClass("loading");
$("#downloadButton").addClass("error");
console.error(e);
});
}
}
$("#downloadButton").click(function() {
$("#downloadButton").addClass("loading");
$('<div id="notification"><span>Starting download...</span></div>').prependTo('body');
setTimeout(function() {$("#notification").fadeOut()}, 6000);
downloadResource("https://share.dmca.gripe/a7Bcp5j4zSRL9WIV.m4a","audio.m4a");
});
//]]>
</script>
javascript html blob
Basically what I'm trying to do is download a file (around 10mb) and show progress percentage on page for the download progress. I can't use the normal html attribute download="filename.jpg" because the file is not hosted on the same domain. Chrome won't allow cross domain downloads anymore. My workaround for this is loading then downloading the file as a BLOB object via javascript. I have this working however I need to figure out a way to get the progress percentage of the download and display it on the page or console.log(progress). I have my code attached. If someone could please help me out on this I would appreciate it.
#downloadButton {
background:#000;
color:#FFF;
padding:10px;
cursor:pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<div id="downloadButton">
Click here to download file
</div>
<script>
function forceDownload(blob, filename) {
var a = document.createElement('a');
a.download = filename;
a.href = blob;
a.click();
}
// Current blob size limit is around 500MB for browsers
function downloadResource(url, filename) {
if (!filename) filename = url.split('\').pop().split('/').pop();
if (url.indexOf(".zip") !== -1 || url.indexOf(".rar") !== -1) {
$("#downloadButton").removeClass("loading");
forceDownload(url, filename);
} else {
fetch(url, {
headers: new Headers({
'Origin': location.origin
}),
mode: 'cors'
})
.then(response => response.blob())
.then(blob => {
let blobUrl = window.URL.createObjectURL(blob);
$("#downloadButton").removeClass("loading");
forceDownload(blobUrl, filename);
})
.catch(e => {
$("#downloadButton").removeClass("loading");
$("#downloadButton").addClass("error");
console.error(e);
});
}
}
$("#downloadButton").click(function() {
$("#downloadButton").addClass("loading");
$('<div id="notification"><span>Starting download...</span></div>').prependTo('body');
setTimeout(function() {$("#notification").fadeOut()}, 6000);
downloadResource("https://share.dmca.gripe/a7Bcp5j4zSRL9WIV.m4a","audio.m4a");
});
//]]>
</script>
#downloadButton {
background:#000;
color:#FFF;
padding:10px;
cursor:pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<div id="downloadButton">
Click here to download file
</div>
<script>
function forceDownload(blob, filename) {
var a = document.createElement('a');
a.download = filename;
a.href = blob;
a.click();
}
// Current blob size limit is around 500MB for browsers
function downloadResource(url, filename) {
if (!filename) filename = url.split('\').pop().split('/').pop();
if (url.indexOf(".zip") !== -1 || url.indexOf(".rar") !== -1) {
$("#downloadButton").removeClass("loading");
forceDownload(url, filename);
} else {
fetch(url, {
headers: new Headers({
'Origin': location.origin
}),
mode: 'cors'
})
.then(response => response.blob())
.then(blob => {
let blobUrl = window.URL.createObjectURL(blob);
$("#downloadButton").removeClass("loading");
forceDownload(blobUrl, filename);
})
.catch(e => {
$("#downloadButton").removeClass("loading");
$("#downloadButton").addClass("error");
console.error(e);
});
}
}
$("#downloadButton").click(function() {
$("#downloadButton").addClass("loading");
$('<div id="notification"><span>Starting download...</span></div>').prependTo('body');
setTimeout(function() {$("#notification").fadeOut()}, 6000);
downloadResource("https://share.dmca.gripe/a7Bcp5j4zSRL9WIV.m4a","audio.m4a");
});
//]]>
</script>
#downloadButton {
background:#000;
color:#FFF;
padding:10px;
cursor:pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<div id="downloadButton">
Click here to download file
</div>
<script>
function forceDownload(blob, filename) {
var a = document.createElement('a');
a.download = filename;
a.href = blob;
a.click();
}
// Current blob size limit is around 500MB for browsers
function downloadResource(url, filename) {
if (!filename) filename = url.split('\').pop().split('/').pop();
if (url.indexOf(".zip") !== -1 || url.indexOf(".rar") !== -1) {
$("#downloadButton").removeClass("loading");
forceDownload(url, filename);
} else {
fetch(url, {
headers: new Headers({
'Origin': location.origin
}),
mode: 'cors'
})
.then(response => response.blob())
.then(blob => {
let blobUrl = window.URL.createObjectURL(blob);
$("#downloadButton").removeClass("loading");
forceDownload(blobUrl, filename);
})
.catch(e => {
$("#downloadButton").removeClass("loading");
$("#downloadButton").addClass("error");
console.error(e);
});
}
}
$("#downloadButton").click(function() {
$("#downloadButton").addClass("loading");
$('<div id="notification"><span>Starting download...</span></div>').prependTo('body');
setTimeout(function() {$("#notification").fadeOut()}, 6000);
downloadResource("https://share.dmca.gripe/a7Bcp5j4zSRL9WIV.m4a","audio.m4a");
});
//]]>
</script>
javascript html blob
javascript html blob
asked Nov 20 '18 at 18:56


Riley BellRiley Bell
587
587
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53399744%2fhow-to-get-loading-progress-for-an-html-blob-with-javascript%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53399744%2fhow-to-get-loading-progress-for-an-html-blob-with-javascript%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown