首页 > 解决方案 > 如何隐藏丑陋的 aws s3 url - RoR 应用程序

问题描述

我的 RoR 应用程序在 Heroku 上,并且活动存储配置正确。但是,当我在应用程序中并获取上传的文档时,网址类似于https://cremers.s3.eu-west-1.amazonaws.com/cx9xy0pmbieagvuw8a0vzcnfhvcc?response-content-disposition=inline%3B filename%3D"Digeste_9.1.pdf"%3B....

如何将其更改为“正常”网址,例如https://www.cremers.fr/documents/digest_9.1.pdf

标签: ruby-on-railsamazon-web-servicesrails-activestorage

解决方案


您可以使用路由/控制器充当一种代理。我已经做到了这一点,下面大致是我使用的代码,根据您的具体情况进行了编辑。

显然,我没有使用您的设置对此进行测试,并且在我的情况下我没有使用 ActiveStorage,因此您可能需要/想要调整,但这应该可以帮助您入门:

# config/routes.rb
Rails.application.routes.draw do
  get '/documents/:filename.:format.:compression', to: 'documents#show'
end
# app/controllers/documents_controller.rb

require 'open-uri'

class DocumentsController < ApplicationController
  def show
    bucket_name = 'cremers'
    aws_region = 'eu-west-1'
    filename = params[:filename]
    s3_url = "https://s3-#{aws_region}.amazonaws.com/#{bucket_name}/#{filename}"
    data = open(s3_url)
    send_data data.read, type: data.content_type
  end
end

推荐阅读