Ruby 在Rails中上载和解析文本文档

Ruby 在Rails中上载和解析文本文档,ruby,ruby-on-rails-3,file-upload,Ruby,Ruby On Rails 3,File Upload,在我的应用程序中,用户必须上传一个文本文档,然后由接收控制器操作解析其内容。我已成功上传文档,但阅读其内容时遇到问题 在这个问题上有几个线程。我在这些线程上尝试了或多或少的所有建议,但仍然无法解决问题 这是我的密码: file_data = params[:file] contents = "" if file_data.respond_to?(:read) contents = file_data.read else if file_data.respond_to?(:path)

在我的应用程序中,用户必须上传一个文本文档,然后由接收控制器操作解析其内容。我已成功上传文档,但阅读其内容时遇到问题

在这个问题上有几个线程。我在这些线程上尝试了或多或少的所有建议,但仍然无法解决问题

这是我的密码:

file_data = params[:file]

contents = ""

if file_data.respond_to?(:read)
  contents = file_data.read
else
  if file_data.respond_to?(:path)
    File.open(file_data, 'r').each_line do |line|
      elts = line.split
      #
      #
    end
  end
end
因此,我的问题如下: 文件数据未“响应”到:读取或:路径。根据该主题的其他一些线程,如果上传的文件小于某个大小,它将被解释为字符串,并将响应:read。否则,它应该响应:path。但在我的代码中,它对这两个都不响应

如果我尝试取出If语句并直接尝试File.open(File_data,'r'),我会得到一个错误,说找不到该文件

有人能帮我找出毛病吗


PS,我真的很抱歉,这是一个多余的问题,但我发现其他线程没有帮助

您是否实际存储了该文件?因为如果你不是,当然找不到

首先,通过添加
file\u数据的调试输出,找出
file\u数据的实际结果。检查
。这可能是您不期望的,尤其是表单设置不正确时(即
:multipart=>true

Rails应该将上传的文件封装在提供统一接口的特殊对象中,以便像这样简单的东西可以工作:

file_data.read.each_line do |line|
  elts = line.split
  #
  #
end

嗯,我以为上传文件会把它存储到服务器可以访问的位置?我想不是。我该如何保存文件?好的,它会保存在一个临时目录中。实际上我从来没有这样做过:这里是我在复制rubyonrails指南上的逻辑的指南,我遇到了一些问题。uploaded|io=params[:file]file.open(Rails.root.join('public','data',params[:file]),'w')do | file | file.write(uploaded|io.read)end我收到一个错误,表示字符串没有读取方法。它在upload_io上调用“read”,这是上载文件的名称。请确保上载文件夹位于公用文件夹中。在调用Rails.root.join时,我传入了参数“public”和“data”。在公用文件夹中有一个数据文件夹难道还不够吗?file_data是一个字符串,即上载文本文件的名称。我还在表单提交中包括:multipart=>true。以下是我的观点中的相关代码:“静态页面”、:操作=>“完成注册”、:多部分=>true、:方法=>“post”)do%>
multipart
选项应进入
form\u标记的第二个参数。您将它与url选项混合在一起,因此它以url而不是表单的
enctype
属性结束。尝试将您的视图代码更改为:
“静态页面”、:action=>“完成注册”、{:multipart=>true、:method=>“post”})do%>