2017-11-20 3 views
1

Ich habe die folgende Funktion, um Zeile (n) der Daten zu senden, die auf der Serverseite ('/ salarypayments/generateGirofile') verarbeitet werden und wird URL (s) zurück an die Client-Seite zum Download der Datei senden (e):Mehrere Dateien herunterladen

genGiro: function(model) { 
     var self = this; 
     var controller = this.get('controller'); 

     var chosenPayslips = []; 

     controller.get('chosenPayslips').forEach(function(chosenPayslip) { 
      chosenPayslips.push(chosenPayslip.get('id')); 
     }); 

     this.get('authObject').authorize('authorizer:application', (headerName, headerValue) => { 
      const requestHeaders = {}; 
      requestHeaders[headerName] = headerValue; 

      Ember.$.ajax({ 
       type: "POST", 
       headers: requestHeaders, 
       data:{ 
        payslipsArray: chosenPayslips, 
        amountPaid: controller.get('amountPaid'), 
        service_type: controller.get('service_type'), 
        process_mode: controller.get('process_mode'), 
        valueDate: moment(controller.get('valueDate')).format('YYYYMMDD'), 
        countTran: 6, 
        user: this.get('authObject.session.content.authenticated.user.id') 
       }, 
       url: this.store.adapterFor('application').get('namespace') + '/salarypayments/generateGirofile', 
       success: function(response){ 

        var link = document.createElement("a"); 
        link.style.display = 'none'; 

        document.body.appendChild(link); 

        response.forEach(function(download){ 

         link.href = download.link; 
         link.download = download.filename; 

         link.click(); 
        }); 

        document.body.removeChild(link); 

        $('#myModal').modal('hide'); 
        location.reload(); 

       }, 
       error: function(xhr, status, error){ 
        console.log('Error ' + error); 
       } 
      }); 

     }); 
    } 

aber ich bin nur in der Lage den Download von 1 Datei zu starten, nehme an, es 2 Dateien haben. Die Array-Antwort hat das folgende Attribut:

{ link: 'http://127.0.0.1/folder/1/file1.txt', filename: 'file1.txt'} 
{ link: 'http://127.0.0.1/folder/1/file2.txt', filename: 'file2.txt'} 

Antwort

-1

Mehrere Downloads gleichzeitig;

var link = document.createElement("a"); 
 

 
response = [{ 
 
    "href" : "https://assets.babycenter.com/ims/2016/09/iStock_83513033_4x3.jpg", 
 
    "name" : "baby-1.jpg" 
 
},{ 
 
    "href" : "https://i.pinimg.com/736x/ea/97/16/ea97165480012b28ca1190e886239a0c--baby-costumes-photographing-babies.jpg", 
 
    "name" : "baby-2.jpg" 
 
},{ 
 
    "href" : "https://i.pinimg.com/736x/38/53/bf/3853bf5660dbb7abf589cee6d9060ccb--adorable-babies-cute-kids.jpg", 
 
    "name" : "baby-3.jpg" 
 
}] 
 

 
link.setAttribute('download', null); 
 
link.style.display = 'none'; 
 
document.body.appendChild(link); 
 
response.forEach(function(download){ 
 
    link.setAttribute('href', download.href); 
 
    link.setAttribute('download', download.name); 
 
    link.click(); 
 
}); 
 
document.body.removeChild(link);

+0

gibt es eine andere Art und Weise als die Datei zippen? Ich würde es vorziehen, keinen zusätzlichen Schritt für den Benutzer zu erstellen. – chris

+1

Sie können mehrere Anker für mehrere Dateien erstellen und über alle Anker iterieren und sie anklicken. Theoretisch sollte dies funktionieren –

+0

kann ein Beispiel geben, wie man das macht? – chris