How can I let a user download multiple files when a button is clicked?

前端 未结 9 1077
不知归路
不知归路 2020-11-27 18:18

So I have a httpd server running which has links to a bunch of files. Lets say the user selects three files from a file list to download and they\'re located at:

         


        
9条回答
  •  渐次进展
    2020-11-27 18:54

    I fond that executing click() event on a element inside a for loop for multiple files download works only for limited number of files (10 files in my case). The only reason that would explain this behavior that made sense to me, was speed/intervals of downloads executed by click() events.

    I figure out that, if I slow down execution of click() event, then I will be able to downloads all files.

    This is solution that worked for me.

    var urls = [
      'http://example.com/file1',
      'http://example.com/file2',
      'http://example.com/file3'
    ]
    
    var interval = setInterval(download, 300, urls);
    
    function download(urls) {
      var url = urls.pop();
    
      var a = document.createElement("a");
      a.setAttribute('href', url);
      a.setAttribute('download', '');
      a.setAttribute('target', '_blank');
      a.click();
    
      if (urls.length == 0) {
        clearInterval(interval);
      }
    }
    

    I execute download event click() every 300ms. When there is no more files to download urls.length == 0 then, I execute clearInterval on interval function to stop downloads.

提交回复
热议问题