ruby-on-rails - 设置 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但无法弄清楚它的作用以及它是如何工作的。
解决方案
在您config/storage.yml
的本地存储服务中,您应该有一个配置块,您可以通过为 root 指定不同的路径来更改附件的存储位置。
local:
service: Disk
root: <%= Rails.root.join('storage') %>
我认为您无法以您描述的方式处理特定图像。ActiveRecord 为附加到模型的所有内容创建唯一键,并使用该键重命名文件。
推荐阅读
- mysql - mysql查询加入,比较两个表并返回第一个表中的所有记录
- html - Flask-如何修复 html 中的 img '404 图片未找到'
- javascript - 我想在右上角显示每个日期的值,它的标题
- android - 我们可以在一个 xml 文件中创建多个形状并将它们指向这个单个文件吗?
- c++ - 如何从 github 为 C++ 项目正确安装第三方库?
- python - 协议中的 CRC 计算不正确。一种是使用zlib实现的,另一种是在函数中计算的
- python-3.x - 功能完成后如何销毁顶层窗口?
- cgal - CGAL:join_facet() 对循环器的真正作用是什么?
- java - 如何打印、排序和获取高于 90 的温度
- java - 如何在 Android Studio 3.4 中复制和重命名项目?