繁体   English   中英

Google Cloud Storage - 在不知道特定文件名的情况下公开 URL

[英]Google Cloud Storage - getting public URL without knowing specific filename

我有一个 Rails 5.2.3应用程序托管在 Google Cloud 服务上。 在我的前端,我要求用户上传他们员工的图像,这些图像被保存到 GC 存储桶中,重要的是,对于我的问题,它们以随机名称保存。 有数百个这样的图像,它们基本上都有随机的 40 多个字符串作为存储桶内的名称。

在数据库中,每个用户都有多个员工,每个员工都附有一张图片。

我正在尝试创建一个 Email ,其中我需要为每个用户包含一个特定员工的图像。 现在,我正在使用ActiveStorage::service_url方法,但问题是service_url方法将从 GCS 返回一个签名的 URL ,它有一个(默认情况下)5 分钟的 TTL,这意味着图像将在 5 分钟后停止访问分钟和用户得到一个破碎的形象。 该图像最初确实显示得很好,它只是在 5 分钟后过期。

我如何在邮件视图中使用service_url方法的示例

<%= image_tag (employee.photo.service_url) if employee.photo.attached? %>

Now, the GCS docs state that to get the public URL, you just have to use the BUCKET_NAME/FILE_NAME URL, but because there's hundreds of these files and they're saved with randomized names (I'm not the one that set that up最初,不要问为什么),我根本没有办法为每个用户以明智的方式做到这一点,特别是因为这是每周 email 发布给每个用户的,表示他们的员工正在执行最好的,所以即使对于一个客户,email 每周都会使用不同的图片。

有什么方法可以让我获得用于这些电子邮件的公共图像 URL 吗?

我的storage.yml文件

google:
  service: GCS
  project: REDACTED
  credentials: <%= Rails.application.credentials.gcs_storage_credentials.to_json %>
  bucket: images-REDACTED

我的production.rb环境文件

config.active_storage.service = :google
config.action_mailer.asset_host = Rails.application.credentials.send(production_server_url)

我的宝石文件

ruby '2.6.3'
gem 'rails', '~> 5.2.3'
gem 'pg', '>= 0.18', '< 2.0'
gem 'active_storage_base64'
gem 'google-cloud-storage', '~> 1.8', require: false

您可以根据 URL 设置到期时间

image_tag(employee.photo.service_url(expires_in: 1.year.to_i))

如果您需要最终到期的资产,max 的答案是一个很好的答案,但我需要一个更持久的解决方案。 事实证明这真的很简单,我不得不调用employee.photo ,而GCS 似乎吐出了一个永久的URL!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM