在保存到 ActiveStorage 之前获取文件名 - Rails 5.2.1
Getting filename before saving in 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]
并按照 here 所述对其调用 .original_filename
,但出现错误 NoMethodError: undefined method `original_filename' for #<String:0x007fac77fd18c8>
。
当我检查参数时,文件确实以字符串形式返回,那么如何获取文件名或如何让 original_filename
工作?
您需要在表单中添加 multipart: true
。
https://guides.rubyonrails.org/form_helpers.html#uploading-files
另一件事是,如果您有多个文件,您将有多个文件名。
params[:upload][files].each do |file|
file.original_filename
end
我终于能够在附加文件后通过 file.blob.filename
获取文件名。
基于 the ActiveStorage documentation,我发现这对我有用:
file.filename.to_s
在我的例子中,我有一个
的模型
has_one_attached :file
OP的情况略有不同,你的情况可能也不同,所以相应调整。
Troy 的解决方案原样对我不起作用。我必须添加 .to_s
来获取文件名而不是 ActiveStorage::Filename
对象。但我不确定他为什么在那里使用 .blob
。我不需要它,但也许有一个很好的理由。
我试图在 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]
并按照 here 所述对其调用 .original_filename
,但出现错误 NoMethodError: undefined method `original_filename' for #<String:0x007fac77fd18c8>
。
当我检查参数时,文件确实以字符串形式返回,那么如何获取文件名或如何让 original_filename
工作?
您需要在表单中添加 multipart: true
。
https://guides.rubyonrails.org/form_helpers.html#uploading-files
另一件事是,如果您有多个文件,您将有多个文件名。
params[:upload][files].each do |file|
file.original_filename
end
我终于能够在附加文件后通过 file.blob.filename
获取文件名。
基于 the ActiveStorage documentation,我发现这对我有用:
file.filename.to_s
在我的例子中,我有一个
的模型has_one_attached :file
OP的情况略有不同,你的情况可能也不同,所以相应调整。
Troy 的解决方案原样对我不起作用。我必须添加 .to_s
来获取文件名而不是 ActiveStorage::Filename
对象。但我不确定他为什么在那里使用 .blob
。我不需要它,但也许有一个很好的理由。