所以我有一个使用 Shrine 作为文件上传器的 Rails 应用程序。同一个应用程序有一个可以点击和发送图片的移动客户端。目前,移动设备正在单击图片并将它们发送到 AWS S3,然后将 S3 URL 返回到 Rails 以与对象关联。此时,一旦 Shrine 收到此 S3 URL,我将其保存到object.upload_remote_url
. 随后,Shrine 再次将其上传到 S3,从而为通过 JSON API 传入的每个图像向 S3 发出 2 个请求。
- 我想知道的是,处理从 Mobile 到 Web Server 到 S3 的文件上传的最佳实践是什么?开发人员使用的最佳技术是什么?
- 如何从移动设备以 JSON 格式发送文件。我知道图像可以转换为 Base64 字符串然后发送,但还有哪些其他选项可用?
- 带有 S3 插件的 Shrine Gem 有一个复制选项,如果我错了,它会纠正我,检查源存储桶中的图像并将其复制到目标存储桶。 http://shrinerb.com/rdoc/classes/Shrine/Storage/S3.html#class-Shrine::Storage::S3-label-Upload+options
下面是我的神社配置
require "shrine/storage/s3"
s3_options = {
access_key_id: Rails.application.secrets.aws_access_key_id,
secret_access_key: Rails.application.secrets.aws_secret_access_key,
region: Rails.application.secrets.aws_region,
bucket: Rails.application.secrets.aws_bucket,
}
copy_from = {
copy_source: "#{Rails.application.secrets.aws_bucket}/mobile"
}
Shrine.storages = {
cache: Shrine::Storage::S3.new(prefix: "cache", upload_options: {acl: "public-read"}, **copy_from, **s3_options),
store: Shrine::Storage::S3.new(prefix: "store", upload_options: {acl: "public-read"}, **copy_from, **s3_options)
}
Shrine.plugin :activerecord
Shrine.plugin :direct_upload
Shrine.plugin :restore_cached_data
Shrine.plugin :upload_options
我正在尝试使用选项#3,但我一直在努力让它发挥作用。谁能帮我理解一下?