Ruby on rails Rails仅将上载文件类型限制为.xls

Ruby on rails Rails仅将上载文件类型限制为.xls,ruby-on-rails,ruby,Ruby On Rails,Ruby,我希望从视图上载excel工作表,但只接受excel 2003工作簿。 然而,我的尝试不起作用 这是我当前的实现 在视图中 <%= file_field_tag :contact_file %> 返回带前导的扩展名 File.extname('a.xls') # => ".xls" 而且它没有小写 File.extname('a.XLS') # => ".XLS" 因此,if..行应替换为: if File.extname(params[:contact_file]

我希望从视图上载excel工作表,但只接受excel 2003工作簿。 然而,我的尝试不起作用

这是我当前的实现

在视图中

<%= file_field_tag :contact_file %>
返回带前导
的扩展名

File.extname('a.xls')
# => ".xls"
而且它没有小写

File.extname('a.XLS')
# => ".XLS"
因此,
if..
行应替换为:

if File.extname(params[:contact_file].path.downcase) == '.xls'
如果您还需要ot过滤器
.xls
xlsx
,…,请使用:


File.extname
返回
.xls
,因此需要

if ['.xls','.xlsx', '.xlsb', '.xlsm'].include? File.extname(params[:contact_file].path.downcase)

falsetru的回答很好;我只是想补充一下,您可能还想考虑Excel文件不一定有.xLS扩展这一事实。事实上,当前版本Excel的默认扩展名是.xlsx。因此,不要像现在这样检查单个文件扩展名

File.extname( params[:contact_file] ) == '.xls'
<>你可能想考虑对集合进行检查。所以你可以做一些类似的事情来付账

['.xls','.xlsx', '.xlsb'].include? File.extname(params[:contact_file])
有关Excel扩展的完整列表,以便您确定应支持哪些扩展,请查看此处


我现在无法将
ActionDispatch::Http::UploadedFile转换为字符串
@user2963716,请尝试
if File.extname(params[:contact_File.).path.downcase)=='.xls'
@user2963716,如果params[:contact_File.path.downcase.end_以“('.xls','.xls')”结尾如何
如果params[:contact_File].original_filename.downcase.end_以?(“.xls”,“.xlsx”)
(用
original_filename
更改
path
)我现在无法将
ActionDispatch::Http::UploadedFile转换为字符串
您可以尝试一下'params[:contact_file]。路径,看看这是否解决了问题?@user2963716上载的文件在
.xlsx>中。我已更新我的答案,以包括该格式和所有其他excel格式。最后一次尝试:
File.extname(params[:contact\u File]。original\u filename)。downcase
if ['.xls','.xlsx', '.xlsb', '.xlsm'].include? File.extname(params[:contact_file].path.downcase)
File.extname( params[:contact_file] ) == '.xls'
['.xls','.xlsx', '.xlsb'].include? File.extname(params[:contact_file])