2
我需要通過ajax從服務器上下載文件。問題是該文件不存儲在服務器上。我的基於java後臺自動從請求參數生成文件,並在響應體返回它:通過ajax下載文件
@RequestMapping(value = "/download", method = RequestMethod.GET)
public void download(@RequestParam String description, @RequestParam Long logId, HttpServletResponse response) {
try {
InputStream fileContent = // getting file as byte stream
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader("Content-Disposition", "attachment; filename=file.zip");
ServletOutputStream responseOutputStream = response.getOutputStream();
org.apache.commons.io.IOUtils.copy(fileContent, responseOutputStream);
response.flushBuffer();
} catch (IOException e) {
logger.error("Attempt to download file failed", e);
}
}
,所以我需要處理,並允許用戶下載文件。 我的客戶端包含此:
$.ajax({
type: "GET",
url: "/download",
data: {
description: "test",
logId: 123
},
success: function(data) {
var blob = new Blob([data]);
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "file.zip";
link.click();
}
})
控制器返回文件,但後來什麼也沒有發生。我究竟做錯了什麼?
好的,但我需要做什麼,如果我想要發佈請求而不是獲取並傳遞looong字符串參數? – Everv0id
此方法不適用於POST。但是,你爲什麼現在改變你的問題? –
您的回答在我的特定情況下完美運行。我只是想深入挖掘。 – Everv0id