我在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
。
我的REST服務端的響應是象下面這樣:
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
是的,它通過ajax ...更新我的問題與HTML部分 –