我需要通过API将视频上传到第三方。使用API;上传位置";有效期为15分钟。现在我需要将我的活动存储视频直接上传到这个远程上传位置。这个远程位置不由我管理。
我已经阅读了官方文档,但不清楚在哪里可以用这个更改默认的上传位置url。文件:https://edgeguides.rubyonrails.org/active_storage_overview.html#direct-上传
上传位置:
{"uploadLocation"=>"https://storage-3rd-party.s3.eu-west-1.amazonaws.com/staging/folderr/12345/xxxx?X-Amz-
Security-Token=xxx...."}
如果我理解正确,您将希望为这个第三方API实现一个自定义ActiveStorage::Service。在后台,rails调用url_for_direct_upload
来获取您想要自定义的URL。
如果你实现了这样一个新服务,你应该能够接近工作:
class ThirdPartyStorageService < ActiveStorage::Service
def url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:)
ThirdPartyAPI.get_upload_location(...)
end
# Implement other abstract methods...
end
然后,您需要在config/storage.yml
:中添加您的服务
third_party:
service: ThirdPartyStorageService
# username: ...
# password: ...
# other config...
然后,您可以将其设置为在特定模型中使用,或者全局使用。
# app/models/my_model.rb
class MyModel
has_one_attached :file, service: :third_party
end
# or config/application.rb
config.active_storage.service = :third_party
这是一项艰巨的工作,但我认为这应该为你的成功做好准备!确保阅读ActiveStorage::Service上的文档,如果你不确定如何实现某个方法,你可以查看Azure、AWS和谷歌存储服务的实现,以获得灵感。