在rails 4中,我使用s3_direct_upload
和paperclip
个宝石进行文件上传。现在,当我选择或拖动文件时,它将直接上传到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。 这里同样的模型用于两者,但普通文件上传不起作用,我该如何解决这个问题呢?
答案 0 :(得分:0)
根据您上面给出的答案,您有两个选项(更有意义的选项取决于您在项目中的其他要求):
1)将表单拆分为两种形式,第一种形式收集所有参数(但没有文件)并将它们提交给服务器。如果参数正常,则将用户带到第二个表单,在那里他可以将文件上传到S3并完成表单。 优点:您将文件直接上传到S3 缺点:您现在有一个两阶段表单,您需要将表单状态存储在临时数据库对象,会话状态或表单本身使用隐藏字段
2)停止使用s3_direct_upload
gem,然后沿参数将文件上传到服务器。然后,服务器验证参数并将文件推送到S3。
优点:形式仍然是无国籍
缺点:您的文件通过您的应用服务器,这增加了对带宽和临时磁盘空间的需求。