How to download multiple files in one shot in IE

前端 未结 4 986
Happy的楠姐
Happy的楠姐 2021-01-05 05:40

I want to download multiple files on click of a button in jsp.
I am using the following code in the js to call one servlet twice.

var iframe = document.c         


        
4条回答
  •  温柔的废话
    2021-01-05 05:59

    I had a similar need but also wanted the downloads to occur in a new window.

    I created a js to download a list of files, and a php to do the actual file saving. I used the above as a starting point, and the PHP start from (okay, can't find the original source). I encode the passed URI so spaces in the file names don't cause troubles.

    (function () {
    "use strict";
    
    var files = [],              // Array of filename strings to download
    newWindow,                   // New window to handle the download request
    secondsBetweenDownloads;     // Wait time beteen downloads in seconds
    //
    //  Download a file using a new window given a URI
    //
      function downloadFile(uri) {
        if (!newWindow) {
            newWindow = window.open('',
                '',
                'width=1500 height=100');
        }
        if (newWindow) {
            newWindow.location =
                'saveAs.php?' +
                'file_source=' + encodeURI(uri);
            newWindow.document.title = "Download File: " + uri;
        } else {
            console.log("Unable to open new window.  Popups blocked?");
        }
    }
    //
    //  Download all files specified in the files[] array from siteName.
    //  Download the file at array position zero, then set a timeout for
    //  secondsBetweenDownloads seconds
    //
    function downloadFiles(siteName) {
        var showTime = new Date();
    
        console.log(
                showTime.toTimeString().substring(0,8)  +
                " Starting download for: " + files[0]
            );
        // Skip any empty entries, download this file
        if (files[0].length > 0) downloadFile(siteName + files.splice(0, 1));  
        if (files.length > 0) {                     // If more files in array
                 window.setTimeout(function () {    // Then setup for another iteration
                    downloadFiles(siteName );
                }, secondsBetweenDownloads * 1000); // Delay for n seconds between requests
         } else {
            newWindow.close();                      // Finished, close the download window
         }
    }
    //
    //  Set the web site name and fill the files[] array with the files to download
    //  then kick off the download of the files.
    //
    $(document).ready(function () {
        var
        siteName** = "http://www.mysteryshows.com/thank-you/";
        secondsBetweenDownloads** = 35;   // N seconds delay between requests
    
        files = [
            "show1.mp3",
            "show2.mp3"
       ];
        downloadFiles(siteName, files);
    });
    }());
    

    The HTML for the page is simple. Basically any syntax-compliant page will do.

    The saveAs.php page which the js file uses in the newWindow.location line is php only.

         
    

    I used rawurlencode on just the 'basename' portion of the URI to ensure it was a valid, encoded request.

提交回复
热议问题