加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – ActionDispatch :: Http :: UploadedFile #rea

发布时间:2020-12-17 03:37:07 所属栏目:百科 来源:网络整理
导读:我有一个Rails应用程序,我正在解析上传的CSV.我刚刚发现解析已停止工作并正在调查. 我已经将它追溯到我在ActionDispatch :: Http :: UploadedFile的实例上调用.read的事实,并返回一个空字符串. 上传的文件不为空,当我检查UploadedFile对象时,它有一个像@temp
我有一个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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读