我可以成功接收来自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一如既往地优雅。
但是,我的问题是:
我实际上正在阅读ActionDispatch :: Http :: UploadedFile,根据文档,我应该能够做params ['attachment12']。阅读
我会发表我的发现
答案 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
目录中)。