我正在使用“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/