gpt4 book ai didi

ruby-on-rails - 从新写入的 TempFile 中读取数据不起作用? Ruby on Rails 中的 IOerror 关闭流

转载 作者:数据小太阳 更新时间:2023-10-29 08:01:29 24 4
gpt4 key购买 nike

我在 Ruby on Rails 中实现,我有 2 个 View 。在我的第一个 View 中,我读入了一个文件并显示了第一行(这很好用),然后在我的第二个 View 中(在 Controller 的方法中)我写了一个临时文件。一样。我想再次显示这个临时文件的内容。但这不起作用,我总是收到错误消息:

IOError in Project importerController#result

closed stream

这是我在 Controller 中的代码,在我做的第一个 View 后面:

 tmpfile = Tempfile.new("tempfile")
if tmpfile
tmpfile.write(@samples)
tmpfile.close
tmpfilename = File.basename(tmpfile.path)
tmpfilenametest = tmpfilename
if !$tmpfiles
$tmpfiles = Hash.new
end
$tmpfiles[tmpfilename] = tmpfile
else
flash[:error] = "Cannot save import file."
return
end
@path = tmpfile.path
session[:importer_tmpfile] = tmpfilename
end

然后在我的下一个 View 中,我想通过以下方式读取此文件:

 tmpfilename = session[:importer_tmpfile]
i = 0
sample_count = 5

if tmpfilename
tmpfile = $tmpfiles[tmpfilename]
if tmpfile == nil
flash[:error] = "Tijdelijk bestand bestaat niet!"
return
end
end


fields_map = params[:fields_map]
attrs_map = fields_map.invert

@parsed_tempfile=CSV::Reader.parse(tmpfile)
@sampletemp = []
@parsed_tempfile.each do |row|

@sampletemp[i] = row

i = i+1

end

在这个 View 中我只想展示它,我只有:

<ul>
<% @sampletemp.each do |x| %>
<li>
<%= x %>
</li>
<% end %>
</ul>

有人看到我做错了什么吗?提前致谢!

最佳答案

据我所知,临时文件仅在您关闭它之前有效——然后它就不再有效。如果您想将数据实际保存在关闭后仍然存在的文件中 - 那么您需要使用真正的文件。

编辑;根据我们的讨论,我认为您根本不需要临时文件。您只是显示用户为您上传的部分文件数据。你不需要真正的文件对象(临时文件或其他)。

用户上传一个"file",您可以解析 CSV(就像您所做的那样),然后您可以将其视为一个字符串数组。将其保存在 @var 中,例如“@csv_lines”,并在您的 View 中根据需要访问数组 @csv_lines。

关于ruby-on-rails - 从新写入的 TempFile 中读取数据不起作用? Ruby on Rails 中的 IOerror 关闭流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8151249/

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