我正在使用Rails 5.2的活动存储。我正在遵循EdgeRails指南,并已将Active-Storage配置为使用本地磁盘。
当我使用Rails应用程序时,文件上传效果很好。
但是,问题是我需要物理上访问那些上传的文件,而无需使用Rails作为中介。
查询文件存储位置将返回以下内容:
url_for(@employee_staff.avatar)
=> "/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBGUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--e76664d247cb5437fe1cd11f7ee0ded24f95aee2/profilepic3.jpeg"
我试图找出此文件路径在本地磁盘中的保存位置。到目前为止,我还没有运气。
非常感谢Active-Storage的工作原理以及在哪里可以看到上传的文件的任何解释。
答案 0 :(得分:1)
在本地开发计算机上(由于提到了本地磁盘),您应该有一个文件config/storage.yml
,其块类似于以下内容:
local:
service: Disk
root: <%= Rails.root.join('storage') %>
在上面的示例中,我将文件存储在Rails应用程序根目录中的一个名为storage
的文件夹中。在该文件夹内,您会找到嵌套文件夹,这些文件夹本不希望通过文件资源管理器/ Finder浏览(但可以)。
通过Rails应用程序(例如,通过视图),您将使用url helpers,但尚无详细记录。
在Rails控制台中,您可以为Foo
的模型尝试使用has_one_attached :photo
Foo.last.photo.blob.key
它应该给您〜24个字符串。
在子文件夹内是一个文件,该文件的名称与您在上方打印出的键相匹配(无扩展名)。那是你的文件。
答案 1 :(得分:0)
如果您有变体:
variant = @employee_staff
.avatar
.attachment
.variant(resize: '100x100')
.processed # If variant is not processed
variant.service.send(:path_for, variant.key) # Absolute path to variant file
答案 2 :(得分:0)
ActiveStorage::Blob.service.path_for(@employee_staff.avatar.key)