1

伙计,现在我想用rails 4上传文件我的问题现在我在上传之前无法检查文件扩展名

注意: 我可以很好地上传文件, 但我想在上传之前获取文件类型

因为我需要在我的应用程序的另一个步骤中进行扩展。

我尝试使用命令

File.extname(params[:Upload])

但总是出错

can't convert ActionDispatch::Http::UploadedFile into String

还有我如何在上传之前获取文件基名??当我尝试使用

File.basename(params[:Upload])

我有同样的错误

can't convert ActionDispatch::Http::UploadedFile into String

同样,当我尝试将名称转换为 Sting 时,我什么也没有得到

4

2 回答 2

5

那是因为File.extname需要一个字符串文件名,但是一个上传的文件(你params[:upload]是一个对象,它是类的一个实例ActionDispatch::Http::UploadedFile(一种临时文件)

要解决问题,您需要调用对象path上的属性params[:upload],有点像

File.extname(params[:Upload].path)

顺便说一句,如果你想获取上传文件的类型,我鼓励你检查一下params[:Upload].content_type,它更难欺骗

于 2014-02-09T23:58:10.353 回答
0

你可以使用这个:

params[:Upload].original_filename.split('.').last

包含带扩展名的original_filename完整文件名。

所以你根据它拆分它'.',最后一个索引将包含文件扩展名。

例如: "my_file.doc.pdf".split('.').last # => 'pdf'

您可以查看此以获取更多信息ActionDispatch::Http::UploadedFile

于 2020-11-05T11:14:32.480 回答