我试图将附件添加到此网站上的联系表单我正在制作但我无法通过动作邮件来附加上传的文件。我有回形针将文件上传到S3,但我无法抓住该文件并将其附加到邮件中。
我的应用程序堆栈是:Heroku,Rails 3和回形针上传到S3,这是我到目前为止所拥有的:
def contact_notification(sender)
@sender = sender
if attachments.count > 0
# Parse the S3 URL into its constituent parts
uri = URI.parse @sender.photo.url(:original).authenticated_url
# Use Ruby's built-in Net::HTTP to read the attachment into memory
response = Net::HTTP.start(uri.host, uri.port) { |http| http.get uri.path }
# Attach it to your outgoing ActionMailer email
attachments[@sender.attachment_file_name] = response.body
end
mail(:to => xxx)
结束
我做错了什么?我仍然是一个铁杆菜鸟,所以我把它拼凑在一起。
答案 0 :(得分:1)
快速说明:
亚马逊现在需要
gem 'aws-sdk', :require => "aws-sdk"
而不是上面列出的s3 gem。
答案 1 :(得分:-3)
如果您还没有s3帐户,请点击此处:
您需要将此添加到您的联系人模型中:
应用程序/模型/ contact.rb
has_attached_file :picture,
:styles => {:large => "275x450>"},
:storage => :s3,
:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
:path => "appname/:attachment/:style/:id.:extension"
确保appname是heroku上的rails应用程序名称。并确保将图片重命名为您为图片命名的内容。
然后您需要config/s3.yml
中的配置文件。
development:
bucket: bucked_name
access_key_id: key
secret_access_key: secret
production:
bucket: bucked_name
access_key_id: key
secret_access_key: secret
确保密钥和密码正确无误。
在你的宝石文件中,确保你安装了这些宝石:
gem "aws-s3", :require => "aws/s3"
gem "paperclip"
然后在表单中,您需要一个文件字段并将表单声明为多部分:
<% form_for(@contact, :html => {:multipart => true}) do |f| %>
<p><%= f.file_field :picture %></p>
<% end %>
那应该这样做。 如果您还没有s3帐户,请在此处获取:
您需要将此添加到您的联系人模型中:
应用程序/模型/ contact.rb
has_attached_file :picture,
:styles => {:large => "275x450>"},
:storage => :s3,
:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
:path => "appname/:attachment/:style/:id.:extension"
确保appname是heroku上的rails应用程序名称。并确保将图片重命名为您为图片命名的内容。
然后您需要config/s3.yml
中的配置文件。
development:
bucket: bucked_name
access_key_id: key
secret_access_key: secret
production:
bucket: bucked_name
access_key_id: key
secret_access_key: secret
确保密钥和密码正确无误。
在你的宝石文件中,确保你安装了这些宝石:
gem "aws-s3", :require => "aws/s3"
gem "paperclip"
然后在表单中,您需要一个文件字段并将表单声明为多部分:
<% form_for(@contact, :html => {:multipart => true}) do |f| %>
<p><%= f.file_field :picture %></p>
<% end %>
然后将您的联系人邮寄给图片。你说你使用过rails 3?
所以在您的联系模式中:
class Contact << ActiveRecord::Base
before_save :mail_user
def mailer_user
ContactMailer.contact_notification(@user).deliver
end
end
然后在你的邮件程序中(假设你在Rails 3上):
class ContactMailer < ActionMailer::Base
default :from => "sam@codeglot.com"
def contact_notification(@user)
@subscription = "test"
@url = "test"
mail(:to => "test@test.com",
:subject => "Test")
end
end
因此,在您的邮件程序视图中,您需要包含和图像标记,如下所示:
<%= image_tag(@contact.picture(:small)) %>
然后,您只需在创建联系人后向您发送电子邮件并附上附件。