我的应用程序假设从数据库下载文件。控制器:@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!"); } });}
2 回答
婷婷同学_
TA贡献1844条经验 获得超8个赞
这里发生的是您的 ajax 请求正在/book/download/
按照url:
参数中的指定进行。当请求成功完成时,它会触发success
回调。但是,您在那里所做的只是显示警报 - 与alert("success!")
- 所以不会发生任何进一步的事情。
链接的答案解释了为什么您不能像您想象的那样简单地使用 ajax 执行此操作。我没有重复所有链接的答案,因为它已经在那里进行了解释,但是该答案的主要内容与您的问题完全相同。
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
downloadBook : function(bookId) {
window.location = basePath + '/book/download/' + bookId
}
我的 downloadBook 方法现在看起来像这样,它解决了我的问题。
添加回答
举报
0/150
提交
取消