Grammin
Grammin

Reputation: 12205

How can I use window.location.href to download multiple files?

I have the following javascript:

function downloadFiles(){
  var files = [];
  files.push('mysite.com/file1.txt');
  files.push('mysite.com/file2.txt');
  files.push('mysite.com/file3.txt');

  for(var ii=0; ii<files.length; ii++){
    window.location.href = files[ii];
  }
}

The problem is this only downloads the last file in the list because the first two files get overwritten by the last one. How can I wait for the user's input on each file before moving on to the next file?

Upvotes: 4

Views: 28143

Answers (3)

Zia
Zia

Reputation: 2710

old one but the solution for this that I ended up going with is the following

let currentIndex = 0;
const intervalId = setInterval(() => {
  if (currentIndex === files.length - 1) clearInterval(intervalId);
  window.location.href = files[currentIndex];
  currentIndex++;
}, 1000);

Upvotes: 0

Grammin
Grammin

Reputation: 12205

What I ended up doing:

function downloadFiles(){
  var files = [];
  files.push('file1.txt');
  files.push('file2.txt');
  files.push('file3.txt');

  for(var ii=0; ii<files.length; ii++){
    downloadURL(files[ii]);
  }
}

var count=0;
var downloadURL = function downloadURL(url){
  var hiddenIFrameID = 'hiddenDownloader' + count++;
  var iframe = document.createElement('iframe');
  iframe.id = hiddenIFrameID;
  iframe.style.display = 'none';
  document.body.appendChild(iframe);
  iframe.src = url;
}

Upvotes: 10

Chris Young
Chris Young

Reputation: 1809

If you change your code to use window.open() instead of window.location, you can launch all three downloads at the same time.

I know this doesn't satisfy the requirement of waiting on the user's input before presenting each of the downloads, but it does build off of the spirit of your original code. Hopefully it will help a little.

function downloadFiles(){
  var files = [];
  files.push('file1.txt');
  files.push('file2.txt');
  files.push('file3.txt');

  for(var ii=0; ii<files.length; ii++){
    window.open(files[ii]);
  }
}

Upvotes: 8

Related Questions