我的应用程序应该从数据库下载文件。
Controller :
@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!");
}
});
}
最佳答案
参见Download a file by jQuery.Ajax
这里发生的情况是,您的 ajax 请求正在向 url:
参数中指定的 /book/download/
发出。当请求成功完成时,它会触发 success
回调。然而,您所做的只是显示一个警报 - 使用 alert("success!")
- 因此不会再发生任何事情。
链接的答案解释了为什么你不能像你想象的那样简单地使用 ajax 来做到这一点。我没有重申所有链接的答案,因为它已经在那里进行了解释,但该答案的原理与您的问题完全相同。
关于java - 使用ajax调用处理资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54332134/