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