【问题标题】:Upload file directly to S3 without need to use forms in Rails无需在 Rails 中使用表单,直接将文件上传到 S3
【发布时间】:2015-09-13 18:09:57
【问题描述】:
对于我的 Rails 应用程序,我从远程 URL 下载一堆文件到我的应用程序。我想直接将它们上传到 Amazon S3,不需要表单来进行上传,因为我会临时缓存我在 EC2 实例上下载的文件。
我还想保留我上传的文件的链接,以便以后下载。
我实际上是在重新发布我下载的文件。
我环顾四周,但大多数解决方案似乎都涉及与用户一起将表单上传到 S3。
有直接上传的解决方案吗?
【问题讨论】:
标签:
ruby-on-rails
amazon-web-services
file-upload
amazon-s3
【解决方案1】:
您可以使用AWS SDK for Ruby 直接上传到 S3。最简单的方法是:
require 'aws-sdk'
s3 = Aws::S3::Resource.new(region:'us-west-2')
obj = s3.bucket('bucket-name').object('key')
obj.upload_file('/path/to/source/file')
或者您可以找到其他几个选项here。
【解决方案2】:
您可以简单地使用EvaporateJS 来实现这一点。您还可以利用发送 ajax 请求在每次文件上传后将文件名更新到数据库。尽管 javascript 暴露了一些细节,但您的存储桶不易受到黑客攻击,因为 S3 服务提供了存储桶策略。
只需在生产模式下将<AllowedOrigin>*</AllowedOrigin> 设置为<AllowedOrigin>specificwebsite.com</AllowedOrigin>。