gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:36:35 24 4
gpt4 key购买 nike

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

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

上传的文件不是空的,当我检查 UploadedFile对象,它有一个类似 @tempfile=#<File:/tmp/RackMultipart20130530-34976-6jaqt5 的属性.如果我 cat文件系统上的那个文件,它包含我所期望的。

为什么可能.read返回一个空字符串?

我正在使用 Rails 3.2.13。

最佳答案

尝试倒带

我的同事建议调用rewind之前 read ,这行得通。显然其他一些代码首先读取文件。

更新

据我所知,没有人在我之前阅读文件。我创建了一个初始化程序来监视 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

我没有看到对 read 的任何其他调用.考虑到可能有一些其他方法可以推进读取指针,我更进一步并完全替换了该类:
# 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

依然没有。我看到一个调用 initialize ,我调用 rewind ,我的电话是 read .

似乎这个文件是预先缠绕到最后的。我不知道为什么会这样,但是 rewind对我来说仍然是修复。

关于ruby-on-rails - ActionDispatch::Http::UploadedFile#read 返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16840613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com