首页 > 解决方案 > 设置 ActiveStorage 磁盘服务上传路径

问题描述

有谁知道如何更改 disk_service.rb 以指定上传路径,例如:

my_path = Rails.root.join("public", "websites", "example.com", "users", current_user.id, "avatar")
current_user.avatar.attach(file, my_path)

这将导致在此处上传文件:

/public/websites/example.com/users/12345/avatar/blah.png

然后我就可以:

rails_representation_path( current_user.avatar.variant(resize: "100x100"), disposition: 'attachment')

并返回路径:

/websites/example.com/users/12345/avatar/blah-100x100.png

这将允许摆脱围绕 ActiveStorage 公共/私有 URL 以及与 CDN 缓存相关的许多问题。

我正在玩https://github.com/rails/rails/blob/master/activestorage/lib/active_storage/service/disk_service.rb但无法弄清楚它的作用以及它是如何工作的。

标签: ruby-on-railsrails-activestorage

解决方案


在您config/storage.yml的本地存储服务中,您应该有一个配置块,您可以通过为 root 指定不同的路径来更改附件的存储位置。

local:
  service: Disk
  root: <%= Rails.root.join('storage') %>

我认为您无法以您描述的方式处理特定图像。ActiveRecord 为附加到模型的所有内容创建唯一键,并使用该键重命名文件。


推荐阅读