ruby-on-rails - rails send_data 在使用 POST 发送 Excel 文件时不发送任何内容

标签 ruby-on-rails ruby excel rest axlsx

当我调用 send_data在导出 Excel 文件的 Controller 方法结束时(使用 Axlsx),如果使用 POST 调用 Controller 方法,则不会发生任何事情。如果使用 GET 调用相同的 Controller 方法,send_data工作得很好。在这两种情况下,Excel 文件略有不同(POST 发送的数据决定了数据在 Excel 中的显示方式),但我已经验证了 excel_file使用 POST 时设置正确。 使用 Postman 从外部调用 POST 端点时,会下载正确的 Excel 文件。但是,当在浏览器中单击发出​​此 POST 请求的链接时,send_data似乎什么都不做。 Controller 方法有两行代码:

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

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

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

在 chrome 的开发人员工具中检查网络,使用 POST 创建一个“导出”操作和一个“结果”操作。 export是处理 POST 和 GET 的 Controller 方法的名称。这是信息(仅包括相关信息,主机/来源/引荐链接都可以)。

“导出”信息:
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 时有效,但在浏览器中使用时无效。

最佳答案

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

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

这对我有用,我希望这个很棒的链接能得到更多的关注。

关于ruby-on-rails - rails send_data 在使用 POST 发送 Excel 文件时不发送任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46062006/

相关文章:

ruby-on-rails - 动态 `named_scope` 取决于某些标准

ruby-on-rails - 如何在 ruby​​ 中搜索和替换字符串?

ruby-on-rails - Heroku ruby​​ 版本不匹配

ruby - Test First 的温度对象项目 - 它通过了所有测试,但这就是我应该学习的内容吗?

python xlsxwriter 在使用 write_row 时更改所有单元格宽度

ruby-on-rails - 在生产环境的服务器上部署sidekiq

ruby - 为什么这不起作用,ruby 中字符串的未定义空白

c# - Interop.Excel 本地化和 Range.Formula 与 Formulalocal

excel - 如何将 Excel VBA 类集合合并到接口(interface)/工厂方法中?

ruby-on-rails - 如何使用 Reform 预填充特色对象?