You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置carrierwave fog-google获取GCS带过期时间的签名URL?

实现GCS带过期时间的签名URL配置方法

你的现有代码已经完成了CarrierWave与GCS的基础存储配置,要生成带过期时间(比如1小时)的签名URL,只需在上传器中添加自定义方法调用fog-google的签名功能,具体操作如下:

1. 修正上传器代码并添加签名URL方法

首先修复原有store_dir的语法错误(缺少case关键字),再新增生成签名URL的自定义方法:

class TestUploader < CarrierWave::Uploader::Base

  storage :fog

  def fog_credentials
    {
      provider: 'google',
      google_project: 'my project',
      google_json_key_location: 'myCredentialFile.json'
    }
  end

  def fog_provider
    'fog/google'
  end

  def fog_directory
    '{#bucket-name}'
  end

  def store_dir
    # 修正语法错误,替换file_type为实际的文件类型判断逻辑(比如用file.content_type)
    case file_type
    when :file
      "#{file.getpath}/file"
    when :audio
      "#{file.getpath}/audio"
    else
      puts "Invalid file"
      "invalid_files" # 返回有效路径避免报错
    end
  end

  # 自定义方法:生成带过期时间的签名URL,默认1小时(3600秒)
  def expiring_url(expires_in = 3600)
    fog_file = file.fog_file
    # 调用fog-google的签名URL生成方法,expires参数指定过期时间(秒)
    fog_file.url(expires: expires_in)
  end

end

2. 在业务代码中使用签名URL

关联上传器的模型实例直接调用自定义方法即可获取签名URL:

# 示例:假设User模型的avatar字段使用TestUploader
user = User.find(1)
# 获取1小时后过期的签名URL
signed_url = user.avatar.expiring_url
# 自定义过期时间,比如2小时(7200秒)
signed_url = user.avatar.expiring_url(7200)

关键注意事项

  • 确保你的服务账号(myCredentialFile.json)拥有storage.objects.get权限,否则无法生成签名URL。
  • fog_file.url(expires: expires_in)是fog-google原生方法,自动生成符合GCS规范的签名URL,过期时间单位为秒。

内容的提问来源于stack exchange,提问作者sagar verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:09:24