ruby-on-rails - Ruby 文件复制生成不同的文件

标签 ruby-on-rails ruby file rest temporary-files

我对 ruby​​ 中的文件处理不太熟悉。我遇到的一个问题是读取和写入二进制文件不会生成完全相同的文件。

clone = Tempfile.new(tempfile.original_filename)
FileUtils.copy_stream(临时文件,克隆)
克隆.flush

从下图中可以清楚地看出,它不是精确的文件副本,当我尝试在图像查看器中打开新创建的文件时,它报告该文件已损坏。我尝试过以不同的方式复制文件,例如 clone.write(tempfile.read) 等,但没有成功。

File compare *文件查看器还指示原始文件是 ANSI Dos/Windows,克隆文件是 ANSI Macintosh。文件大小也相差约 200 字节。

我想要完成的实际上只是简单地使用临时文件两次。文件通过 Rails 上传并作为临时文件提供给我。我想将其提交到两个不同的 Restful 服务,并且 RestClient.post 会自动关闭文件。另一种选择是将某种内存流克隆提交给 RestClient,以便它无法关闭我的文件。如果我向 RestClient 提交 File.open(tempfile.path) ,它会生成相同的损坏文件,这表明读取是问题,而不是写入。如果我将原始 Tempfile 对象提交给 RestClient,它可以正常工作,但随后它会被关闭并删除,我无法再次发送它。

请帮忙!

问候,
皮埃尔

最佳答案

查看这些文件的十六进制 View 而不是文本编辑器的解释会更有帮助。我的猜测是至少有一个文件没有以二进制模式打开。在 Ruby 1.9 中,尝试

open(filename, 'rb')
open(filename, 'wb')
Tempfile.new(filename, :binmode => true)

分别用于打开文件进行读/写和创建二进制临时文件。

关于ruby-on-rails - Ruby 文件复制生成不同的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9501457/

相关文章:

ruby-on-rails - Ruby on Rails : Can anyone identify what would possibly cause this error when running a rake?

ruby-on-rails - Ruby - 将星期几转换为整数

ruby - 使用 Jekyll/Liquid 将 Markdown 内容传递给 Ruby 函数

ruby-on-rails - 如果 Gemfile 中没有 Heroku gem,则无法从 Rake 任务中调用 heroku CLI

c - C 程序中来自 txt 文件的输入参数

java - 复制给定 url 的文件

ruby-on-rails - 你如何做有限制的急切加载?

ruby-on-rails - 如何向 form_with 添加隐藏字段?

ruby-on-rails - Rails 在 ActiveRecord::Relation 对象中查找记录而无需再次查询数据库

c++ - 从读入内存的文件中提取数据