gpt4 book ai didi

ruby-on-rails - Rails - 通过 API 将文件直接上传到 S3

转载 作者:行者123 更新时间:2023-12-01 23:46:19 24 4
gpt4 key购买 nike

如何在 Rails 中开发将文件直接上传到 S3 的 API?我可以通过搜索和现有 gems 找到的所有内容都使用 jQuery,显然我的 API 无法使用它。

现在我正在使用 Paperclip 执行上传,但这会在上传文件时锁定 Unicorn 进程。

最佳答案

我一直在从事一个具有类似要求的项目,我使用的解决方案是让客户端(在我的例子中是一个 iOS 应用程序)将文件直接上传到我们 S3 存储桶中的一个临时文件夹。

假设带有回形针附件的模型名为 Asset,这是我们目前所做的:

  1. 客户端上传想要的文件到S3
  2. 如果上传成功,客户端会通过 ping API 传递文件位置的详细信息。
  3. 在我们的例子中,API 使用下载 S3 文件的路径创建/更新 Asset 模型并立即返回。
  4. 然后,我们为 API 服务器启动一个 delayed_job 进程,以从我们的 S3 存储桶中获取和处理文件。
  5. 处理结束后,我们会从 S3 存储桶中删除临时文件。

伪代码

客户端将文件上传到 S3(在我们的例子中使用 ASW iOS SDK)

[[BSAAWSWrapper sharedAWSWrapper] uploadFileToBucket:url progressBlock:... completionBlock:...]

将上传文件的详细信息发送到API

POST "server.com/api/assets"
Parameters: {..., "s3_upload_path"=>"temp/UEA8zLE7FJ.m4v"}

API Controller

def create
# create logic here
@asset.delay.fetch_s3_upload
end

Assets 模型

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

关于ruby-on-rails - Rails - 通过 API 将文件直接上传到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29105280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com