Ruby on Rails上传文件问题奇怪的utf8转换错误

Bud*_*sey 10 ruby file-upload ruby-on-rails-3

我正在尝试上传文件,我收到以下错误:

"\xFF" from ASCII-8BIT to UTF-8
Run Code Online (Sandbox Code Playgroud)

我正在跟踪导轨指南他们正在做什么.这是我正在使用的代码.

file = params[:uploaded_file]

File.open(Rails.root.join('public', 'images', file.original_filename), 'w') do |f|
  f.write(file.read)
end
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它不起作用.我究竟做错了什么?

更新 - 这是应用程序跟踪

app/controllers/shows_controller.rb:16:in `write'
app/controllers/shows_controller.rb:16:in `block in create'
app/controllers/shows_controller.rb:15:in `open'
app/controllers/shows_controller.rb:15:in `create'
Run Code Online (Sandbox Code Playgroud)

小智 33

我相信这是rails 3如何与ruby 1.9一起使用的一个变化,因为1.9支持编码,它会尝试将所有字符串转换为你在app配置(application.rb)中设置的任何编码,通常这是'utf-8' .

为避免编码问题,请以二进制模式打开文件,因此对于二进制可写模式,您的模式为'wb':

File.open(Rails.root.join('public', 'images', file.original_filename), 'wb') do |f|
  f.write(file.read)
end
Run Code Online (Sandbox Code Playgroud)

  • 我在指南中创建了一个拉取请求来纠正这个问题.手指交叉:) https://github.com/rails/rails/pull/11910 (2认同)