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

0s0u357o  于 2023-01-14  发布在  Ruby
关注(0)|答案(4)|浏览(162)

我试图在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 %>

我已经尝试访问params[:upload][files]并在其上调用.original_filename,如此处所述,但我得到错误NoMethodError: undefined methodoriginal_filename' for #String:0x007fac77fd18c8。 当我检查参数时,文件确实以字符串的形式返回,那么如何获得文件名或者如何使original_filename`工作呢?

zengzsys

zengzsys1#

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

bhmjp9jg

bhmjp9jg2#

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

file.filename.to_s

在我的例子中,我有一个模型

has_one_attached :file

OP的情况稍有不同,你的情况也可能不同,所以要相应地调整。
Troy的解决方案并不适用于我。我必须添加.to_s来获得文件名,而不是ActiveStorage::Filename对象。但我不确定他为什么在那里使用.blob。我不需要它,但也许有一个很好的理由。

5us2dqdw

5us2dqdw3#

只是跑步

rake assets:precompile

对我有用。

lsmepo6l

lsmepo6l4#

您需要将multipart: true添加到窗体中。
https://guides.rubyonrails.org/form_helpers.html#uploading-files
另一件事是,如果你有多个文件,你会有多个文件名。

params[:upload][files].each do |file|
  file.original_filename
end

相关问题