fja*_*ahr 0 ruby regex file-upload ruby-on-rails-3
我正在开发一个解析各种形式的电子表格的应用程序.它适用于CSV,现在我正在尝试使用roo gem将其扩展到XLS,XLSX,ODS和Google Spreadsheets.
我希望根据文件名正确解析上传的文件.我试图通过正则表达式和switch以及if语句来实现这一点,但到目前为止它没有用.问题似乎在正则表达式的条件下,因为甚至不再解析CSV文件.
这是我目前的版本:
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|
Run Code Online (Sandbox Code Playgroud)
如果我把if语句拿出来就可以了,所以问题必须在那里.我正在使用普通的上传表单.
您上传的CSV文件可能是大写的扩展名吗?myfile.CSV你的正则表达式不匹配.你可以通过告诉它匹配不区分大小写来解决这个问题:
/.\.csv$/i
Run Code Online (Sandbox Code Playgroud)
我还删除了无关的括号,并在显式中添加,.以便mycsv不匹配.您也不需要在扩展名之前匹配所有字符(但可能希望确保至少有一个字符,因此文件不仅仅命名为".csv").
此外,它可能params[:uploadform][:file]不是您期望的字符串.它可能是一个ActiveDispatch::UploadedFile,在这种情况下你将不得不调用original_filename它来获取文件名:
params[:uploadform][:file].original_filename =~ /.\.csv$/i
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1747 次 |
| 最近记录: |