2016-04-29 3 views
2

Ich habe eine Node/Express-Website für meine Universität Projekt, dass nach der Suche nach einer ID eines Gesetzes, zeigt es eine große Tabelle mit allen Dateien in verschiedenen Formaten und Sprachen, die mit dieser ID zusammenhängen. Ich verwende das Modul "http-proxy", um diese Dateien anzufordern und an den Client zu senden. Nichts ist falsch, wenn Xml-, Xhtml-, HTML- und PDF-Dateien bereitgestellt werden (jeder Browser kann sie direkt anzeigen). Ich habe Probleme mit ZIP- und RDF-Dateien. Dateien, die nicht beschädigt sind, aber sie verlieren den ursprünglichen NamenKnoten/Express Force Browser zum Download der Datei mit benutzerdefinierten Namen

  • wenn ich ZIP-Symbol klicken Sie auf, es mir die Download-Aufforderung gibt, aber ich bin mit dem ursprünglichen Dateinamen zu verlieren (die Datei aufgerufen wird, „Proxy“ oder "proxy.zip", verschiedene Verhaltensweisen in verschiedenen Browsern)
  • Wenn ich auf das RDF-Symbol klicke, öffnen einige Browser die Datei direkt im Browser, einige Browser erkennen das Format nicht, manche Browser wollen es mit dem Namen "Proxy" herunterladen ")

So entdeckte ich das HTML5-Attribut" Download "des Tags" a ". Es löst nur mein Problem, jedenfalls wird es nicht bei jeder Version von Internet Explorer und Safari unterstützt. Beim Surfen im Internet habe ich einige Problemumgehungen gefunden, um nach dem div-Link "Right click and save as ..." hinzuzufügen, wenn die Seite in IE oder Safari angezeigt wird, aber diese Lösung ist nichts für mich, weil ich nicht von einem einzigen rede Link, aber eine Tabelle voller Links. Und meine Seite muss auch auf Mobiltelefonen funktionieren.

Gibt es eine Möglichkeit, serverseitigen Code zu schreiben, um Browser zum Herunterladen von Dateien mit einem benutzerdefinierten Dateinamen zu zwingen?

Hier ist das kleine Stück Code des Proxy:

var httpProxy = require('http-proxy'); 
var proxy = httpProxy.createProxyServer({ ignorePath: true }); 

app.get('/proxy', function(req , res) { 
    var file = req.query.file; 
    var realurl = 'http://'+cfg.edb_opt.host+':'+cfg.edb_opt.port+cfg.edb_opt.rest+file; 
    console.log('Proxy: serving '+realurl); 
    proxy.web(req, res, { 'target': realurl }); 
}); 

Alle cfg * Variablen aus einer JSON-Konfigurationsdatei kommt der Host, Port zu setzen und Ausgangspfad, in dem Dateien enthalten sind.

Vielen Dank im Voraus :)

Antwort

1

Sie benötigen einen neuen Header an das Response-Objekt hinzufügen, um die Dateinamen, um anzuzeigen, und einen regelmäßigen Download tun.

res.set("Content-Disposition", "attachment;filename=somefile.ext"); 

Sie auch „inline“ verwenden können, wenn Sie stattdessen den Browser versuchen wollen in ihm selbst die Datei zu öffnen, wie mit Chrome funktioniert mit pdf-Dateien.

res.set("Content-Disposition", "inline;filename=somefile.ext"); 

Per @Thomas Vorschlag ist auch eine gute Idee, immer den richtigen Inhaltstyp enthalten:

res.set("Content-Type", "application/octet-stream"); 
+1

einen Download zu erzwingen, können Sie auch wollen, können 'Content-Type hinzufügen: application/Oktett-Stream "zu" Content-Disposition: Anhang " – Thomas

Verwandte Themen