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

Where does active storage store files (on disk), and how can I retrieve them physically?

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

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

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

查询文件的存储位置returns这个:

url_for(@employee_staff.avatar)
=> "/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBGUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--e76664d247cb5437fe1cd11f7ee0ded24f95aee2/profilepic3.jpeg"

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

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

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

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

在上面的示例中,我将文件存储在 rails 应用程序根目录下名为 storage 的文件夹中。在该文件夹内,您会发现嵌套的文件夹,这些文件夹不打算通过文件 explorer/Finder 导航(但您可以)。

通过您的 rails 应用程序,例如通过视图,您将使用 url helpers,但尚未得到很好的记录。

从 rails 控制台,您可以尝试为名为 Foo 的模型使用 has_one_attached :photo

Foo.last.photo.blob.key

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

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

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

如果您有变体:

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
ActiveStorage::Blob.service.path_for(@employee_staff.avatar.key)

如图所示