我正在从Flash应用程序中传输wav数据。如果我获得数据并执行以下操作:
f = File.open('c:/test.wav', 'wb')
f << wav_data.pack('c'*wav_data.length)
f.close
wav文件完美无缺。如果我这样做:
f = Tempfile.new('test.wav')
f << wav_data.pack('c'*wav_data.length)
f.close
FileUtils.mv(f.path, 'c:/')
文件在那里,但听起来都是乱码。签入十六进制编辑器显示工作文件的任何地方都有0A(或\ n),乱码版本有0D0A(或\ r \ n)
我正在使用它与rails + paperclip一起使用,我将使用Heroku和S3的组合作为实时应用程序,所以我希望这个问题能解决,但我想让它工作暂时在我的本地机器上。
有没有人知道FileUtils.mv会这样做的原因,以及是否有办法改变其行为?
答案 0 :(得分:4)
它看起来像二进制文件与文本文件问题。您应该使用File#binmode
将文件设置为二进制文件,如下所示:
f = Tempfile.new('test.wav')
f.binmode
f << data
你的第一个例子中你必须有open
的第二个参数,不是吗?像“w + b”这样的东西,可能......“b”代表二进制。