活动存储在哪里存储文件(在磁盘上),我如何从物理上检索它们?
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)
如图所示
我在 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)
如图所示