2016-09-02 1 views
0

Ich brauche eine Hilfe. Ich muss die Datei während des Downloads mit Javascript/Angular.js umbenennen. Wirklich habe ich eine Funktionalität HTML-Tabelle zu Excel-Blatt konvertieren und herunterladen. Ich erkläre meinen Code unten.Wie kann ich Benutzern erlauben, die Datei während des Downloads mit Javascript umzubenennen

$scope.generateExcelSheet=function(){ 
      var uri = 'data:application/vnd.ms-excel;base64,' 
      , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>' 
      , base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) } 
      , format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }) } 
       var table='exportable'; 
       var name='Report'; 
      // console.log('table',table,name); 
      if (!table.nodeType) table = document.getElementById(table) 
      var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML} 
      window.location.href = uri + base64(format(template, ctx)); 

    } 

Hier muss ich vor der Datei herunterladen wird es fragt Benutzer, um die Datei umzubenennen und dann herunterladen. Bitte hilf mir.

Antwort

0

Anstatt das Fenster Standort, um Ihre Daten-URL zu ändern, erstellen Sie ein <a> Element (es ist nicht Teil des DOM sein muss, es reicht document.createElement('a') zu verwenden), setzen URL in der href Eigenschaft auf die base64-URL und Fügen Sie ein download Attribut mit einem beliebigen Dateinamen hinzu, den Sie interessieren. Dann rufen Sie click() auf dem erstellten Anker.

Dies funktioniert mit jedem Browser, supports the download attribute, was bedeutet - die meisten modernen Browser, mit Ausnahme von IE11 (funktioniert aber auf Edge) und Safari.

+0

Können Sie Ihre Idee mit meinem Code teilen? Ich bin nicht völlig klar. – subhra

+0

Welcher Ort benötigt einen Kommentar? Sie erstellen eine URL (nach 'uri + base64 (format (template, ctx));'). Anstatt es 'window.location' zuzuweisen, führen Sie die von mir beschriebenen Schritte durch. Erstellen Sie einen Anker, legen Sie seine href fest, legen Sie den Download fest, rufen Sie click() auf. – fdreger

+0

OK, lass es mich tun. – subhra

Verwandte Themen