2017-04-18 1 views
0

Ich versuche, eine Wrapper-API für eine andere API zu schreiben, die Dateiname als Eingabe nimmt und die Datei herunterlädt.Node Wrapper API für eine andere Download-API

Die rohe api ist https://test.com/?filename=abc.pdf

ich einen Wrapper für diese API oben schreiben wollen, aber das macht scheint nicht zu funktionieren, druckt es nur einige Daten, die ich gelesen kippe aber doesnot die Datei senden.

var options = { 
    "method": "GET", 
    "hostname": test.com, 
    "port": 443, 
    "path": "/?filename=" +fileName, 
    "rejectUnauthorized": false, 
    } 

apiHelper.makeRequest(https, options, false, function(responseObject){ 
    if(responseObject.error){ 
     downloadBackupCallback(null, responseObject.error); 
    } 
    else{ 
     downloadBackupCallback(responseObject.data, null); 
    } 
    }) 

Kann mir bitte jemand hier helfen.

Antwort

0

Es klingt wie Sie durch den Körper der Antwort von der API verbatim, aber nicht die richtigen Anforderungsheader setzen.

Wenn Sie von einem Browser auf Ihr Wrapper-Skript zugreifen, wird dies dazu führen, dass die Antwort der Anforderung so wiedergegeben wird, als wäre es HTML. Wenn dies bei einer PDF-Datei passiert, kann es sehr nach Müll aussehen.

Stellen Sie sicher, dass Sie die richtigen HTTP-Header festlegen, wenn Sie Ihre Antwort zurücksenden, und nehmen Sie diese, wenn möglich, aus den Headern, die von der umwickelnden API bereitgestellt werden.

Ich würde vorschlagen, dass Sie mindestens Content-Type und Content-Disposition benötigen. Verwenden Sie idealerweise eine streambasierte Lösung, um die Antwort bei ihrem Eintreffen zu übergeben, damit Sie bei großen Dateien keine großen Datenmengen lokal zwischenspeichern.

+0

wenn möglich können Sie mir bitte ein Beispiel Link verweisen. In der Zwischenzeit versuche ich auch, was Sie vorgeschlagen haben. – undefined

+0

Ein Beispiel für was? Ein Beispiel für ein bestimmtes Element meiner vorgeschlagenen Lösung würde wahrscheinlich gefunden werden, indem man [die Express-Dokumente] (http://expressjs.com/en/4x/api.html#res.methods) durchliest. Ich finde oder generiere ein Beispiel für das Ganze und mache effektiv deine Hausaufgaben für dich ... Ich fand, dass 'sendFile()' eine Datei auf der Festplatte haben muss, um sie zu senden, also werde ich diesen Teil meiner Antwort entfernen, da wäre es besser, die Antwort direkt zu senden. – Benjamin

Verwandte Themen