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

时间:2019-02-08 20:38:40

标签: ruby-on-rails ruby rails-activestorage

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

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

但是,问题是我需要物理上访问那些上传的文件,而无需使用Rails作为中介。

查询文件存储位置将返回以下内容:

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

我试图找出此文件路径在本地磁盘中的保存位置。到目前为止,我还没有运气。

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

3 个答案:

答案 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个字符串。

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

在子文件夹内是一个文件,该文件的名称与您在上方打印出的键相匹配(无扩展名)。那是你的文件。

答案 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)

Answer