私はJavaでRESTサービスを持っており、クライアントにファイルを送信するエンドポイントを持っています(HTTP GET、/ file)。私のフロントエンドのクライアントはNodeJSです。私はRESTサービスからファイルをダウンロードできません。特定の場所にのみファイルを保存できますが、他のダウンロードダイアログボックスと同様に、ユーザーがファイルを保存できるダウンロードダイアログボックスが必要です。マイNodeJSコードは以下の通りです:NodeJSのサーバーからファイルをダウンロードします
router.get('/openFile',function(req,res){
native_data_retrieval_rest_client.get("http://localhost:8080/file?fileName=presentation.pcap",function(data){
var fileName="/home/files/presentation.pcap";
res.download(data);//This doesnt open dialogue box
fs.writeFile(fileName, data, function (err) {
if (err) {
//Error handling
} else {
console.log('Done');
}
});
});
});
ファイルが場所/home/files/presentation.pcap
に静的に保存されます。
response.setHeader("Content-Disposition", "attachment; filename="
+ fileName);
response.setHeader("Content-Type", type);
reportBytes = new byte[131072];// New change
OutputStream os = response.getOutputStream();// New change
int read = 0;
while ((read = inputStream.read(reportBytes)) != -1) {
os.write(reportBytes, 0, read);
}
//System.out.println("Bytes sent" + reportBytes);
os.flush();
os.close();
そして、私はNodeJS側で取得する結果はそれで、ファイルの内容と警告ボックスのようなものです:
私のRESTサービス側の応答は以下のようなものです。以下の出力を参照してください:
誰も私が私がここでやって何を間違えお知らせくださいことができます。ユーザーが[ダウンロード]ボタンをクリックすると、ダウンロードダイアログボックスが表示されます。ダウンロードボタンをクリックすると、RESTサービスが呼び出され、NodeJSのフロントエンドにファイルが送信され、ダイアログボックスが開き、ユーザーにその場所を尋ねるメッセージが表示されます。
HTMLから私のコールが
tr.append("td").append("button")
.on("click", function(){
openFile();
})
function openFile(){
alert("button clicked");
$http.get('/openFile/').success(function(response) {
console.log(response.response);
}).error(function(error){
alert(error);
});
}
どのようにリクエストしていますか?それはあなたのサイトのajaxまたはダウンロードリンクを介してですか? – JoeMoe1984
はいthrough the ajax ... HTML部分で質問を更新しました –