簡體   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