2

我可以成功接收来自 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 中引用了在此处输入链接描述 显然,Rails 一如既往地优雅。

但是,我的问题是:

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

我实际上正在阅读 ActionDispatch::Http::UploadedFile,根据我应该能够执行 params['attachment12'].read 的文档

我将发布我的发现


  1. 生产是 Heroku,所以我需要将文件粘贴在某种容器中,如 DB、Mongo 或 S3
  2. 我猜该文件实际上是在 sendgrid 但他们的支持不理解我的问题并将我恢复为解析 api!可能有一个 URL,但在他们的支持下我无法深入了解它。很遗憾。
4

2 回答 2

2

这些文件实际上已发布到您的服务器,但您可以ActionDispatch::Http::UploadedFile使用。如果您查看课程描述,您会发现您可以使用以下内容:

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

如果您能告诉我您使用哪种上传解决方案(回形针、carrierwave)(如果有的话),我可以为您提供更好的帮助。

于 2012-06-20T12:18:55.233 回答
1

tempfile是的,该文件实际上已经上传到您的服务器,并且存储在UploadFile. 您可以使用以下内容访问完整的文件路径:

params['attachment12'].tempfile.to_path.to_s

资料来源:如何从“ActionDispatch::Http::UploadedFile”实例中检索 FileBlob?


为了清楚起见,在此过程中,这些文件实际上并不在 SendGrid 的服务器上。它们已经发布给您并存储在您服务器上的某个位置(可能在/tmp目录中)。

于 2012-06-20T15:18:43.097 回答