Ruby 在rails的switch/if语句中使用regex标识上传后的文件扩展名
我正在开发一个解析各种形式电子表格的应用程序。它适用于CSV,现在我正尝试使用RooGem将其扩展到XLS、XLSX、ODS和Google电子表格 我希望上传的文件能够根据文件名正确解析。我曾尝试使用regex和switch以及if语句来实现这一点,但到目前为止,还没有成功。问题似乎在正则表达式的条件内,因为即使CSV文件也不再被解析 以下是我目前的版本:Ruby 在rails的switch/if语句中使用regex标识上传后的文件扩展名,ruby,regex,ruby-on-rails-3,file-upload,Ruby,Regex,Ruby On Rails 3,File Upload,我正在开发一个解析各种形式电子表格的应用程序。它适用于CSV,现在我正尝试使用RooGem将其扩展到XLS、XLSX、ODS和Google电子表格 我希望上传的文件能够根据文件名正确解析。我曾尝试使用regex和switch以及if语句来实现这一点,但到目前为止,还没有成功。问题似乎在正则表达式的条件内,因为即使CSV文件也不再被解析 以下是我目前的版本: def create @deck = Deck.new @deck.name = params[:uploadform][:name
def create
@deck = Deck.new
@deck.name = params[:uploadform][:name]
@deckmsg = ""
if @deck.save
@deckmsg='Deck was successfully created.'
else
respond_to do |format|
format.html { render action: "new", notice: 'Deck was not created.' }
end
end
if params[:uploadform][:file] =~ /.*(csv)$/
begin
@answers = Array.new
@questions = Array.new
CSV.parse(params[:uploadform][:file].read) do |row|
如果我把If语句取出来,它就工作了,所以问题就在那里。我使用的是普通的上传表单。您上传的CSV文件是否有大写扩展名
myfile.CSV
与您的正则表达式不匹配。您可以通过告诉它匹配不区分大小写来解决此问题:
/.\.csv$/i
我还删除了多余的括号,并添加了一个显式的
,以便mycsv
不匹配。您也不需要匹配扩展名之前的所有字符(但可能希望确保至少有一个字符,这样文件就不仅仅名为“.csv”)
而且,params[:uploadform][:file]
很可能不是您期望的字符串。它可能是一个,在这种情况下,您必须在其上调用原始文件名
,以获取文件名:
params[:uploadform][:file].original_filename =~ /.\.csv$/i
也许你上传的CSV文件有一个大写的扩展名
myfile.CSV
与您的正则表达式不匹配。您可以通过告诉它匹配不区分大小写来解决此问题:
/.\.csv$/i
我还删除了多余的括号,并添加了一个显式的
,以便mycsv
不匹配。您也不需要匹配扩展名之前的所有字符(但可能希望确保至少有一个字符,这样文件就不仅仅名为“.csv”)
而且,params[:uploadform][:file]
很可能不是您期望的字符串。它可能是一个,在这种情况下,您必须在其上调用原始文件名
,以获取文件名:
params[:uploadform][:file].original_filename =~ /.\.csv$/i
这解决了你的问题吗?别忘了!嗯,不,不幸的是没有。我正在使用一个文件“cities.csv”进行测试,但它仍然无法通过,即使使用改进的regex…@FabianJahr刚刚意识到一些事情,请查看我的更新答案。是的,就是这样!谢谢!这解决了你的问题吗?别忘了!嗯,不,不幸的是没有。我正在使用一个文件“cities.csv”进行测试,但它仍然无法通过,即使使用改进的regex…@FabianJahr刚刚意识到一些事情,请查看我的更新答案。是的,就是这样!谢谢!