gpt4 book ai didi

Java-Spring-JSP 下载 xls 文件 - POST 正常,GET 不起作用

转载 作者:行者123 更新时间:2023-12-01 11:17:04 26 4
gpt4 key购买 nike

我可能会遗漏一些非常明显的东西,但无论我尝试如何使下载按钮正常工作,只有当我在完整表单上使用 POST 时它才会起作用,而不是使用我需要的 GET 时它才会起作用(我不需要不想发布表单,因为我没有返回 JSP 期望的字符串答案,而是返回一个要下载的附件)。

所以我得到了一个带有表单的 JSP 页面,其中有一个用于下载生成的 xls 文件的按钮。如果我发布表格,我会重新下载 xls。这是代码:

@RequestMapping(params = "exportButton", method = RequestMethod.POST)
public void exportXls(Model model, @ModelAttribute("form") XXXForm form, HttpServletResponse response)
throws IOException {

// generate xls...

response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=xxx.xls");
workbook.write(response.getOutputStream()); //an api to generate xls
workbook.close();
response.flushBuffer();

}

}

所以这在发帖时效果很好:

<form:form id="xxxForm" method="post" modelAttribute="xxxForm" cssClass="cleanform" action="xxx">    
<button type="submit" id="exportButton" name="exportButton" class="printButton">Export</button>

但是如果我尝试使用 get:

<button type="button" id="exportButton" class="printButton" onclick="getReportInXls()">Export</button>

Javascript:

function getReportInXls() {
$('#progressIndicatorImage').show();
$('#exportButton').hide();
$.ajax({
url : 'getListXml',
success : function(data) {
$('#progressIndicatorImage').hide();
$('#exportButton').show();
}
});
}

Java 与映射更改后的情况相同。函数被调用,生成 xls,响应到达,我得到 200-OK 响应,附件位于正文(二进制)中, header 中的 Content-Disposition 中有附件:

响应头:

Cache-Control   
no-cache, no-store
Content-Disposition
attachment; filename=hotel.xls
Content-Type
application/vnd.ms-excel
Date
Wed, 29 Jul 2015 09:27:59 GMT
Expires
Thu, 01 Jan 1970 00:00:00 GMT
Pragma
no-cache
Server
Apache-Coyote/1.1
Transfer-Encoding
chunked

但是,我没有收到下载/查看该文件的报价。浏览器端没有任何反应。我在服务器端和客户端尝试了一些安静的事情。我已经编写了 @ResponseBody 注释,我尝试添加 @RequestMapping(value = "/getXls", method = RequestMethod.GET, Produces = "application/vnd.ms-excel"),尝试了强制下载,似乎没有任何效果.

注意:我已经更改了名称,所以其他时候可能是 getXls 和 getList 之类的东西,但这不是问题。我的服务器端函数被调用,xls 生成正常,我得到一个 200-OK 的返回值,其中似乎包含正确的 header /正文!我只是无法下载/查看我的文件...在两个版本的 Firefox 和 Chrome 中进行了测试。

最佳答案

您的 GET 请求工作正常。

发生的情况是这样的:当您执行 POST 变体时,浏览器本身会处理带有附件的响应,并询问您是否要下载/查看附件。

当您运行 GET 变体时,您对 $.ajax 的 javascript 回调会收到响应(并且浏览器不会干预)。由于它对数据不执行任何操作,因此不会发生任何事情(除了切换指示器和按钮的可见性之外)。

要处理您原来的问题(如何在没有表单帖子的情况下下载),请阅读 this问题及其答案。

关于Java-Spring-JSP 下载 xls 文件 - POST 正常,GET 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31696860/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com