rails send_data在使用POST发送Excel文件时不发送任何东西

当我在控制器方法的末尾调用send_data来导出Excel文件(使用Axlsx)时,如果使用POST调用控制器方法,则什么都不会发生。 如果使用GET调用相同的控制器方法,则send_data可以很好地工作。 在这两种情况下,Excel文件略有不同(POST发送的数据决定了数据在Excel中的显示方式),但是我已经validation了使用POST时excel_file设置正确。 使用邮递员从外部调用POST端点时,会下载正确的Excel文件。 但是,点击发出POST请求的浏览器中的链接时, send_data似乎什么也不做。 控制器方法有两行代码:

 excel_file = excel_util.export(params[:myPostParams] send_data(excel_file.to_stream.read, type: "application/xlsx", filename: "MyExcelWorksheet.xlsx") 

有关我的POST调用的更多信息:

我使用JQuery($ .post方法)从视图中的元素调用POST。 就像我上面提到的,这似乎工作得很好,因为POST调用通过传递正确的信息在正文中,因为excel_file构build正确。

在Chrome的开发者工具中检查networking,使用POST创build一个“导出”操作和一个“结果”操作。 export是处理POST和GET的控制器方法的名称。 这里是信息(只包括相关信息,主机/来历/引用链接都很好)。

'导出'信息:

 Request URL: http://localhost:3000/<myappname>/export Request Method: POST Response Headers: Content-Disposition:attachment; filename="MyExcelWorksheet.xlsx" Content-Length:7648 Content-Transfer-Encoding:binary Content-Type:application/xlsx X-Content-Type-Options:nosniff X-Frame-Options:SAMEORIGIN X-Miniprofiler-Ids:["i6c3..."] Request Headers: Accept:*/* Accept-Encoding:gzip, deflate, br Accept-Language:en-US,en;q=0.8 Connection:keep-alive Content-Length:1803 Content-Type:application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With:XMLHttpRequest Form Data: <the data I send in the body of my POST> 

'results'info:

 Request URL: http://localhost:3000/mini-profiler-resources/results Request Method: POST Response Headers: Content-Type:application/json Request Headers: Accept:application/json, text/javascript, */*; q=0.01 Accept-Encoding:gzip, deflate, br Accept-Language:en-US,en;q=0.8 Connection:keep-alive Content-Length:64 Content-Type:application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With:XMLHttpRequest Form Data: id: <i6c3... < same as the X-Miniprofiler-Id shown above > popup: 1 

是否有一个问题,让让POST请求响应与附件下载在浏览器? 这在从外部调用API时起作用,但在浏览器中使用时不起作用。

这对于使用Ajax进行POST调用确实是个问题,而不一定是send_data的问题。 这是一个很好的解决方法,用Javascript进行POST调用,并在Rails中处理调用:

https://gist.github.com/DavidMah/3533415

这对我有用,我希望这个真棒链接获得更多的知名度。