2017-04-18 3 views
0

ファイル名を入力してファイルをダウンロードする別のAPI用のラッパーAPIを作成しようとしています。別のダウンロードAPIのノードラッパーAPI

生APIは https://test.com/?filename=abc.pdf

である私は、この上記のAPIのラッパーを作成したいが、それは動作しているようだしない、それはちょうど私が読んカントが、doesnotファイルを送信するいくつかのデータを出力します。

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); 
    } 
    }) 

ここでお手伝いできますか?

答えて

0

APIからの応答の本体をパイプで引き渡しているようですが、正しいリクエストヘッダーは設定されていないようです。

ブラウザからラッパースクリプトにアクセスすると、HTMLのようにリクエストのレスポンスを表示しようとした結果になります。これがPDFファイルで起こると、ガベージのように見えます。

レスポンスを返信するときに正しいHTTPヘッダーを設定していることを確認し、可能であれば、ラッピングしているAPIが提供するヘッダーから取得してください。

少なくとも、Content-TypeContent-Dispositionが必要です。理想的にはストリームベースのソリューションを使用して応答を渡すので、ファイルが特に大量の場合は大量のデータをローカルにキャッシュしません。

+0

可能であれば、参考リンクを参考にしてください。私はまた、あなたが提案したものを試しています。 – undefined

+0

何の例ですか?私の提案された解決策の特定の要素の例は、おそらく[エクスプレスドキュメント](http://expressjs.com/en/4x/api.html#res.methods)を見て見つけることができます。私は全部の事例を見つけ出したり生成したりすることは効果的にあなたの宿題をやっているでしょう...私は 'sendFile()'がディスクにファイルを送る必要があることを知りましたので、それは直接的に回答を送ることがより最適になるからです。 – Benjamin

関連する問題