在 ActiveStorage 中保存之前获取文件名 - Rails 5.2.1

tro*_*y34 3 ruby-on-rails rails-activestorage ruby-on-rails-5.2

我试图在 ActiveStorage 继续保存之前获取用户上传的文件的名称。该表单是使用生成的form_with,如下所示:

<%= form_with model: upload do |form| %>
  <div class="">
    <%= form.file_field :files, multiple: true, direct_upload: true, required: true %>
    <%= form.label :files, '', class: 'icon ion-ios-cloud-upload' do %>
      <span>click the icon to select files</span>
    <% end %>

    <div class="actions">
      <%= form.submit "Upload", class: "btn btn-primary" %>
    </div>
 </div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我已尝试按照此处所述访问params[:upload][files]和调用.original_filename它,但出现错误。NoMethodError: undefined method `original_filename' for #<String:0x007fac77fd18c8>

当我检查参数时,该文件确实作为字符串返回,那么我如何获取文件名或如何original_filename开始工作?

ico*_*ast 10

根据ActiveStorage 文档,我发现这对我有用:

file.filename.to_s
Run Code Online (Sandbox Code Playgroud)

就我而言,我有一个模型

has_one_attached :file
Run Code Online (Sandbox Code Playgroud)

OP的情况略有不同,你的情况也可能有所不同,所以要相应地调整。

特洛伊的解决方案对我来说不起作用。我必须添加.to_s来获取文件名而不是ActiveStorage::Filename对象。但我不确定他为什么.blob在那里使用。我不需要它,但也许有一个很好的理由。


tro*_*y34 7

file.blob.filename在附加文件后,我终于能够通过执行获得文件名。