使用POST发送Excel文件时,rails send_data不发送任何内容

时间:2017-09-05 19:23:57

标签: ruby-on-rails ruby excel rest axlsx

当我在控制器方法结束时调用send_data以导出Excel文件(使用Axlsx)时,如果使用POST调用控制器方法,则不会发生任何事情。如果使用GET调用相同的控制器方法,send_data可以正常工作。在这两种情况下,Excel文件略有不同(POST发送的数据决定了数据在Excel中的显示方式),但我已经确认使用POST时excel_file已正确设置。 使用Postman在外部调用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是正确构建的。

使用POST在chrome的开发者工具中检查网络,创建“导出”操作和“结果”操作。 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>

'结果'信息:

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

rails是否存在问题,让POST请求在浏览器中响应附件下载?这在外部调用API时有效,但在浏览器中使用时则无效。

1 个答案:

答案 0 :(得分:0)

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

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

这对我有用,我希望这个很棒的链接可以获得更多的可见性。