Rails Active Storage 创建直接下载 link
Rails Active Storage creating a direct download link
我在 Rails 5.2 中使用 Active Storage。
当我为图像创建下载 link 时,它会为指向 rails 应用程序的 blob 生成一个 URL。
有没有什么方法可以创建一个下载 link 该目录指向像 S3 这样的云服务而不重定向到 rails 应用程序?
您可以使用 ActiveStorage service_url
方法获取文件的 link,如下所示:
Model.last.attachment.service_url
它将return服务link您的附件。您可以阅读更多关于 service_url
here
service_url
方法是正确的方法,但请记住,生成的 url 会及时过期。由于重定向,以这种方式生成的 url 也会变慢(Active Storage 生成指向 Rails 应用程序的 URL。访问时,这些 URL 会重定向到文件的实际服务端点)。
如果你想生成永久直接 url 到附件,Active Storage 没有一些 hackery 目前是行不通的。
有几个建议可以在 Active Storage 中扩展此功能:
https://github.com/rails/rails/issues/34552#issuecomment-469530719
从 controller/view 上下文(后台作业、Cronjobs 等)之外创建一个 link,您可以像这样访问 rails_blob_path:
Rails.application.routes.url_helpers.rails_blob_path(user.avatar, only_path: 真)
如果你想生成url下载附件然后使用命令:
Rails.application.routes.url_helpers.rails_blob_url(user.avatar, only_url: 真)
并将 (user.avatar) 替换为您的 model.activeStorageObject
我在 Rails 5.2 中使用 Active Storage。
当我为图像创建下载 link 时,它会为指向 rails 应用程序的 blob 生成一个 URL。
有没有什么方法可以创建一个下载 link 该目录指向像 S3 这样的云服务而不重定向到 rails 应用程序?
您可以使用 ActiveStorage service_url
方法获取文件的 link,如下所示:
Model.last.attachment.service_url
它将return服务link您的附件。您可以阅读更多关于 service_url
here
service_url
方法是正确的方法,但请记住,生成的 url 会及时过期。由于重定向,以这种方式生成的 url 也会变慢(Active Storage 生成指向 Rails 应用程序的 URL。访问时,这些 URL 会重定向到文件的实际服务端点)。
如果你想生成永久直接 url 到附件,Active Storage 没有一些 hackery 目前是行不通的。
有几个建议可以在 Active Storage 中扩展此功能: https://github.com/rails/rails/issues/34552#issuecomment-469530719
从 controller/view 上下文(后台作业、Cronjobs 等)之外创建一个 link,您可以像这样访问 rails_blob_path:
Rails.application.routes.url_helpers.rails_blob_path(user.avatar, only_path: 真)
如果你想生成url下载附件然后使用命令:
Rails.application.routes.url_helpers.rails_blob_url(user.avatar, only_url: 真)
并将 (user.avatar) 替换为您的 model.activeStorageObject