使用 ajax 调用处理资源

我的应用程序假设从数据库下载文件。


控制器:


@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!");

        }

    });

}


慕雪6442864
浏览 104回答 2
2回答

婷婷同学_

请参阅通过 jQuery.Ajax 下载文件这里发生的是您的 ajax 请求正在/book/download/按照url:参数中的指定进行。当请求成功完成时,它会触发success回调。但是,您在那里所做的只是显示警报 - 与alert("success!")- 所以不会发生任何进一步的事情。链接的答案解释了为什么您不能像您想象的那样简单地使用 ajax 执行此操作。我没有重复所有链接的答案,因为它已经在那里进行了解释,但是该答案的主要内容与您的问题完全相同。

慕尼黑8549860

downloadBook : function(bookId) {&nbsp; &nbsp; window.location = basePath + '/book/download/' + bookId}我的 downloadBook 方法现在看起来像这样,它解决了我的问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java