Guy现在我想上传带有 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时,我什么也得不到
这是因为File.extname
需要一个字符串文件名,但是上传的文件(您的params[:upload]
是一个对象,它是ActionDispatch::Http::UploadedFile
类的实例(一种临时文件)
要解决此问题,您需要在params[:upload]
对象上调用 path
属性,有点像这样
File.extname(params[:Upload].path)
顺便说一句,如果您尝试获取上传文件的类型,我建议您检查params[:Upload].content_type
,因为它更难欺骗
你可以使用这个:
params[:Upload].original_filename.split('.').last
original_filename
包含带扩展名的完整文件名。
因此,您根据'.'
拆分它,最后一个索引将包含文件扩展名。
例如: "my_file.doc.pdf".split('.').last # => 'pdf'
您可以查看此信息以获取更多信息 ActionDispatch::Http::UploadedFile。