2016-08-10 3 views
2

ich ein docx aus Backend mit Eil senden:Herunterladen docx als Blob

module.exports = (req, res) => { 
    res.status(200).sendFile(__dirname+"/output.docx") 
} 

ich es nennen und sie als Blob von Winkel Download mit:

$http({ 
    url: '/api_cv/cv/gen', 
    method: "PUT", 
    responseType: 'blob' 
}).success(function (data, status, headers, config) { 
    var blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' }); 
    var fileName = headers('content-disposition'); 
    saveAs(blob, 'file.docx'); 
}).error(function (data, status, headers, config) { 
    console.log('Unable to download the file') 
}); 

Es funktioniert in Chrome und Firefox. In Safari öffnet sich eine neue Registerkarte, es wird keine Datei heruntergeladen. In IE (via Azure RemoteApp getestet, da ich einen Mac haben), erhalte ich „Ihre aktuellen Sicherheitseinstellungen erlauben nicht diese Datei heruntergeladen werden“.

SaveAs is from https://github.com/eligrey/FileSaver.js/ 

Gibt es eine alternative Möglichkeit, Thins zu tun, die in allen modernen Browsern und IE10 + funktioniert?

+0

getan haben Haben Sie versucht, mit 'arraybuffer' statt' blob' als die 'Antworttyp'? möchten auch Sie könnten den Zugang zu überprüfen, müssen die Header, weiß ich, dass manchmal muss man explizit den Zugriff erlauben, mit 'Access-Control-Expose-Headers' –

+0

es versucht. Gleiches Ergebnis. – Per

+0

Hmm ... aus Interesse, was macht die 'saveAs' Funktion? Ich habe gestern etwas sehr ähnliches gemacht und xlsx als 'Blob' gespeichert und es funktionierte gut, wenn auch in Chrome. –

Antwort

0

Statt saveAs zu verwenden, können Sie versuchen, die folgenden:

var url = window.URL || window.webkitURL; 
var downloadUrl = url.createObjectURL(blob); 

var a = doc.createElement("a"); 
a.style.display = "none"; 

if (typeof a.download === "undefined") { 
    window.location = downloadUrl; 
} else { 
    a.href = downloadUrl; 
    a.download = fileName; 
    doc.body.appendChild(a); 
    a.click(); 
} 

Und dann den Anker zu entfernen, wenn Sie mit ihm fertig sind. Nur frage mich, ob es die Spar Teil ist, dass das Problem ist, ich habe nicht viel Erfahrung mit FileSaver-, aber das ist, was ich in der Vergangenheit

+0

Das ist genau das, was FileSaver- intern Dosis - mit anderer Ausweichlösung wie IE10 zu sagen, dass 'navigator.saveOrOpenBlob()' zum Beispiel hat – Endless

Verwandte Themen