【发布时间】:2015-03-31 19:45:08
【问题描述】:
如何在 Rails 中开发将文件直接上传到 S3 的 API?我可以通过搜索和现有 gem 找到的所有内容都使用 jQuery,显然我的 API 无法使用它。
现在我正在使用 Paperclip 执行上传,但这会在文件上传时锁定 Unicorn 进程。
【问题讨论】:
标签: ruby-on-rails amazon-s3 paperclip
如何在 Rails 中开发将文件直接上传到 S3 的 API?我可以通过搜索和现有 gem 找到的所有内容都使用 jQuery,显然我的 API 无法使用它。
现在我正在使用 Paperclip 执行上传,但这会在文件上传时锁定 Unicorn 进程。
【问题讨论】:
标签: ruby-on-rails amazon-s3 paperclip
我一直在从事一个有类似要求的项目,我使用的解决方案是让客户端(在我的情况下是一个 iOS 应用程序)直接将文件上传到我们 S3 存储桶中的临时文件夹。
假设您的带有回形针附件的模型称为Asset,这是我们目前所做的:
Asset 模型并立即返回。 这是一些伪代码
客户端将文件上传到 S3(在我们的例子中使用 ASW iOS SDK)
[[BSAAWSWrapper sharedAWSWrapper] uploadFileToBucket:url progressBlock:... completionBlock:...]
将上传文件的详细信息发送到 API
POST "server.com/api/assets"
Parameters: {..., "s3_upload_path"=>"temp/UEA8zLE7FJ.m4v"}
API 控制器
def create
# create logic here
@asset.delay.fetch_s3_upload
end
资产模型
class Asset
has_attached_file :video
...
def fetch_s3_upload
url = "http://#{ENV['AWS_S3_HOST_NAME']}/#{ENV['AWS_S3_BUCKET_NAME']}/#{self.s3_upload_path}"
self.video = URI.parse(url)
self.video_content_type = "video/mp4"
if self.save
# delete temp file from S3
end
end
end
【讨论】: