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



在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 method `original_filename' for #<String:0x007fac77fd18c8>

当我检查params时,文件确实会以字符串的形式返回,那么我如何获得文件名或如何使original_filename工作呢?

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

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

file.filename.to_s

在我的情况下,我有一个模型

has_one_attached :file

OP的情况略有不同,您的情况也可能有所不同,因此请相应调整。

特洛伊的解决方案对我来说并不奏效。我不得不添加.to_s来获得文件名,而不是ActiveStorage::Filename对象。但我不知道他为什么在里面用.blob。我不需要它,但也许有一个很好的理由。

您需要将multipart: true添加到表单中。

https://guides.rubyonrails.org/form_helpers.html#uploading-文件

另一件事是,如果你有多个文件,你就会有多个档案名。

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

最新更新