微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – ActionDispatch :: Http :: UploadedFile #read返回空字符串

我有一个Rails应用程序,我正在解析上传的CSV.我刚刚发现解析已停止工作并正在调查.

我已经将它追溯到我在Actiondispatch :: Http :: UploadedFile的实例上调用.read的事实,并返回一个空字符串.

上传文件不为空,当我检查UploadedFile对象时,它有一个像@tempfile =#< File:/ tmp / RackMultipart20130530-34976-6jaqt5这样的属性.如果我在文件系统上捕获该文件,它包含我期望的内容. 为什么.read会返回一个空字符串? 我正在使用Rails 3.2.13.

解决方法

尝试倒带

我的同事建议在阅读之前调用倒带,这样可行.显然其他一些代码正在首先读取文件.

更新

据我所知,在我之前没有人在阅读文件.我创建了一个初始化程序来监视UploadedFile:

# config/initializers/uploaded_file.rb
class Actiondispatch::Http::UploadedFile

  alias_method :old_read,:read
  def read(*args)
    Rails.logger.info "file #{self} is getting read by #{caller.first}!"
    old_read(*args)
  end
end

我没有看到任何其他的阅读电话.认为可能有一些其他方法被称为推进读指针,我进一步完全取代了类:

# config/initializers/uploaded_file.rb
Actiondispatch::Http::UploadedFile = Class.new do

  def initialize(*args)
    Rails.logger.info "initilized with #{args}"
  end

  def method_missing(method_name,*args,&block)
    Rails.logger.info "file got #{method_name} with #{args}.\
      Block? #{block_given?} caller? #{caller.first}"
  end

end

依然没有.我看到一个初始化的电话,我的倒带电话,以及我的阅读电话.

好像这个文件预先缠绕到最后.我不确定为什么会这样,但倒带仍然是我的解决方案.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐