Rails 4 - 如何在表单验证后将文件上传到s3?

时间:2015-09-07 09:48:00

标签: ruby-on-rails ruby amazon-s3 paperclip

在rails 4中,我使用s3_direct_uploadpaperclip个宝石进行文件上传。现在,当我选择或拖动文件时,它将直接上传到s3。

模型代码是,

attr_accessible :direct_upload_url

has_attached_file :document,
:url => '/cv_uploads/:recruiter_id/:unique_id/:resume_basename.:extension',
:path => "/cv_uploads/:recruiter_id/:unique_id/:resume_basename.:extension",
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/s3_credentials/public_s3_details.yml",
:s3_permissions => 'public-read'

现在我想沿着这个功能以正常方式上传文件,一旦表单验证发生,该文件应该上传到s3。 这里同样的模型用于两者,但普通文件上传不起作用,我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:0)

根据您上面给出的答案,您有两个选项(更有意义的选项取决于您在项目中的其他要求):

1)将表单拆分为两种形式,第一种形式收集所有参数(但没有文件)并将它们提交给服务器。如果参数正常,则将用户带到第二个表单,在那里他可以将文件上传到S3并完成表单。 优点:您将文件直接上传到S3 缺点:您现在有一个两阶段表单,您需要将表单状态存储在临时数据库对象,会话状态或表单本身使用隐藏字段

2)停止使用s3_direct_upload gem,然后沿参数将文件上传到服务器。然后,服务器验证参数并将文件推送到S3。 优点:形式仍然是无国籍 缺点:您的文件通过您的应用服务器,这增加了对带宽和临时磁盘空间的需求。