活动存储在哪里存储文件(在磁盘上),以及如何物理检索它们?

Min*_*jer 8 ruby ruby-on-rails rails-activestorage

我在 Rails 5.2 中使用主动存储。我遵循 EdgeRails 指南,并已将 Active-Storage 配置为使用本地磁盘。

当我使用 Rails 应用程序时,文件上传效果很好。

但是,问题是我需要在不使用 Rails 作为中介的情况下物理访问这些上传的文件。

对文件存储位置的查询返回:

url_for(@employee_staff.avatar)
=> "/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBGUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--e76664d247cb5437fe1cd11f7ee0ded24f95aee2/profilepic3.jpeg"
Run Code Online (Sandbox Code Playgroud)

我想弄清楚这个文件路径在我的本地磁盘中的保存位置。到目前为止,我没有运气。

非常感谢有关 Active-Storage 如何工作以及我可以在哪里看到上传文件的任何解释。

Jay*_*sey 8

在您的本地开发机器上(因为您提到了本地磁盘),您应该有一个包含config/storage.yml类似于以下块的文件:

local:
  service: Disk
  root: <%= Rails.root.join('storage') %>
Run Code Online (Sandbox Code Playgroud)

在上面的这个例子中,我将文件存储在一个以storage我的 rails 应用程序的根目录命名的文件夹中。在该文件夹中,您会找到不打算通过文件资源管理器/Finder 导航的嵌套文件夹(但您可以)。

通过您的 rails 应用程序,例如通过视图,您将使用尚未详细记录的url 助手

从轨控制台,你可以尝试,名为模型Foo,用has_one_attached :photo

Foo.last.photo.blob.key
Run Code Online (Sandbox Code Playgroud)

它应该给你一个 ~24 个字符的字符串。

  • 前 2 个字符是我在上面指出的文件夹内的子文件夹
  • 接下来的 2 个字符是其中的一个子文件夹

子文件夹内是一个文件,其名称与您在上面打印的密钥相匹配(无扩展名)。那是你的文件。

  • 它可能不使用原始文件名的原因之一是允许多个文件具有相同的名称。例如,多个用户可能上传名为 profile.png 的文件 (2认同)