我的应用程序想从数据库下载文件。
控制器:
@GetMapping(value = "/download/{id}")
public ResponseEntity<Resource> downloadBook(@PathVariable Long id) {
Book book = bookService.findById(id);
return ResponseEntity.ok().contentType(MediaType.APPLICATION_PDF)
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + book.getFileName() + ".pdf\"")
.body(new ByteArrayResource(book.getFile()));
}
当我直接从浏览器中调用它时此方法有效(下载弹出窗口),但是我打算做的是使用ajax调用来处理它。到目前为止,这是我的ajax方法,但是这段代码实际上只是成功警告我没有弹出下载链接。
downloadBook : function(bookId) {
$.ajax({
url : basePath + '/book/download/' + bookId,
success : function() {
alert("success!");
},
error : function() {
alert("error!");
}
});
}
答案 0 :(得分:1)
请参见Download a file by jQuery.Ajax
这里发生的是,您在/book/download/
参数中指定了对url:
的ajax请求。请求成功完成后,它将触发success
回调。但是,您在此处所做的所有操作都会显示警报-alert("success!")
-因此不会再发生任何情况。
链接的答案说明了为什么您不能像您想象的那样简单地使用ajax来执行此操作。我没有重申所有链接的答案,因为已经在此处进行了解释,但是该答案的原理与您的问题完全相同。
答案 1 :(得分:0)
<Checkbox>
我的downloadBook方法现在看起来像这样,它解决了我的问题。