用ajax调用处理资源

时间:2019-01-23 16:56:10

标签: java ajax spring rest

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

控制器:

@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 个答案:

答案 0 :(得分:1)

请参见Download a file by jQuery.Ajax

这里发生的是,您在/book/download/参数中指定了对url:的ajax请求。请求成功完成后,它将触发success回调。但是,您在此处所做的所有操作都会显示警报-alert("success!")-因此不会再发生任何情况。

链接的答案说明了为什么您不能像您想象的那样简单地使用ajax来执行此操作。我没有重申所有链接的答案,因为已经在此处进行了解释,但是该答案的原理与您的问题完全相同。

答案 1 :(得分:0)

<Checkbox>

我的downloadBook方法现在看起来像这样,它解决了我的问题。