ruby-on-rails - 发送带有 xls 附件的邮件而不生成文件

标签 ruby-on-rails file attachment xls

我正在使用“to_xls”gem 生成 xls。所以我有这样的:

my_xls = User.all.to_xls

现在我想使用 ActionMailer 发送它,我这样尝试:

attachments[my_xls.original_filename] =  {
   :content=>my_xls.read, 
   :mime_type=>my_xls.content_type
}

但令我惊讶的是,my_xls 不是一个文件,而是一个字符串。我想我可以通过打开一个新文件并向其中写入字符串来解决这个问题,但我使用的是 Heroku,它不喜欢写入文件(权限被拒绝)。最好的解决方案是生成类似文件的流数据(例如从 HTML 表单获取文件)并发送它。

我需要类似 Rails send_data Controller 方法的东西,它将数据流发送到 View 而不生成新文件。

那么,我该怎么做呢?

最佳答案

与此类似,我可能弄错了 mime 类型,它在下面的代码中是通用的,但我在操作邮件程序的 Rails 代码中使用的格式如下:

attachment "application/octet-stream" do |a|
  a.body = my_xls.read
  a.filename = my_xls.original_filename
end

可能的类型可能是:

“application/excel”或“application/vnd.ms-excel”而不是“application/octet-stream”

我没有测试过这个...

此外,如果 my_xls 是字符串,您可能必须在通过网络发送之前将其转换为字节:

my_xls.bytes.to_a.pack("C*")

这里有一个 SOF 主题讨论这个问题,但这是针对 send_data 的,但可能仍然适用:

Difficulty with send_data in Ruby on Rails in conjunction with Spreadsheet plug-in

只是想为您指出一个希望能有所帮助的方向!

关于ruby-on-rails - 发送带有 xls 附件的邮件而不生成文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11533097/

相关文章:

ruby-on-rails - 为什么 cucumber 场景只有在我运行完整的测试套件后才会失败?

ruby-on-rails - 如何将 Rails 项目中的迁移文件设为 "clean up"?

ruby-on-rails - Passenger & Nginx => 生产中的 502 Bad Gateway 错误

java - 附上 1.6 的 Java 源代码

ruby-on-rails - rails,如何在函数中传递 self

c - 使用 argc 和 argv 读取文件

C# NAudio 获取音频文件持续时间/性能

r - 将大型 shinydashboard 应用拆分成多个部分

android - 应用程序发送的电子邮件附件与发送的文件名称不同

php - 解析电子邮件附件的脚本