在Rails 3.2.x中接收来自SendGrid附件的电子邮件

时间:2012-06-20 10:32:04

标签: ruby-on-rails-3 email-attachments sendgrid

我可以成功接收来自SendGrid的电子邮件并处理其数据。 我的问题是电子邮件附件。

当我查看每个附件发布的内容时,我会得到以下内容:

"attachment12"=>#<ActionDispatch::Http::UploadedFile:0x00000008a793f8 
                  @original_filename="image036.png", 
                  @content_type="image/png", 
                  @headers="Content-Disposition: form-data; 
                            name=\"attachment12\";
                            filename=\"image036.png\"\r\n
                            Content-Type: image/png\r\n", 
                  @tempfile=#<File:/tmp/RackMultipart20120620-35076-1xav4k1>
                >

而不是

Array
(
  [attachment1] => Array
    (
      [name] => Upload.csv
      [type] => text/csv
      [tmp_name] => /tmp/phpo34iHI
      [error] => 0
      [size] => 76
    )
)

在Parse API中引用了enter link description here 显然,Rails一如既往地优雅。

但是,我的问题是:

  1. 文件在哪里,他们下载的是隐含的?我找不到他们(如果发生这种情况,我会担心)

  2. 我实际上正在阅读ActionDispatch :: Http :: UploadedFile,根据文档,我应该能够做params ['attachment12']。阅读

    我会发表我的发现


    1. 生产是Heroku所以我需要将文件粘贴在某种容器中,如DB,Mongo或S3
    2. 我猜这个文件实际上是在sendgrid,但他们的支持不理解我的问题,并将我还原回解析api!可能有一个URL但我无法在他们的支持下找到它的底部。不幸的是,

2 个答案:

答案 0 :(得分:2)

文件实际上已发布到您的服务器,但您可以使用ActionDispatch::Http::UploadedFile。如果您查看class description,您可以看到有几件事可供您使用:

显然original_filename属性,但您可以使用.read实际读出内容并保存它,或者您可以将临时文件直接传递给您正在使用的任何宝石。

如果您可以告诉我您使用的是什么类型的上传解决方案(paperclip,carrierwave),我可以帮助您更好。

答案 1 :(得分:1)

是的,该文件实际上已经上传到您的服务器,并存储在tempfile的{​​{1}}属性中。您可以使用以下命令访问完整文件路径:

UploadFile

来源:How to retrieve a FileBlob from 'ActionDispatch::Http::UploadedFile' instance?


为了说清楚,这个过程中此时文件实际上并不在SendGrid的服务器上。它们已经发布给您并存储在服务器上的某个位置(可能位于params['attachment12'].tempfile.to_path.to_s 目录中)。