Проблема с загрузкой файла в Ruby on Rails нечетная ошибка преобразования utf8 - PullRequest
10 голосов
/ 14 февраля 2011

Я пытаюсь загрузить файл и получаю следующую ошибку:

"\xFF" from ASCII-8BIT to UTF-8

Я в значительной степени следую инструкциям рельсов в том, что они делают. Вот код, который я использую.

file = params[:uploaded_file]

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

Я не понимаю, почему это не работает. Что я делаю не так?

Обновление - вот приложение Trace

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'

Ответы [ 3 ]

33 голосов
/ 14 февраля 2011

Я полагаю, что это изменение в том, как rails 3 работает с ruby ​​1.9, поскольку 1.9 поддерживает кодировки, он будет пытаться преобразовать все строки в любую кодировку, заданную вами в конфигурации вашего приложения (application.rb), обычно это 'utf -8' .

Чтобы избежать проблемы с кодировкой, откройте файл в двоичном режиме, поэтому ваш режим будет «wb» для двоичной записи:

File.open(Rails.root.join('public', 'images', file.original_filename), 'wb') do |f|
  f.write(file.read)
end
1 голос
/ 26 июля 2012

У меня была похожая проблема с загрузкой двоичных файлов, и ваше решение странным образом не работало, но это было, так что вот для всех, у кого такая же проблема

file.tempfile.binmode

поставьте эту строку перед File.open. Я думаю причина в том, что временный файл открывается в недвоичном режиме после автоматической загрузки, и эта строка переключает его в двоичный файл, поэтому rails не пытается выполнить какое-либо автоматическое преобразование (что является бессмысленным в случае двоичного файла) .

0 голосов
/ 14 июня 2013
dst_path = Rails.root.join('public', 'images', file.original_filename)
src_path = params[:uploaded_file].path
IO.copy_stream(src_path, dst_path) # http://ruby-doc.org/core-1.9.2/IO.html#method-c-copy_stream
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...