-
Читаем бинарные данные
bin_data = File.binread 'photo.jpg' # uJlu File.open 'photo.jpg', 'br' do |file| bin_data = file.read end # uJlu bin_data = user.photo.image.read
-
Кодируем в base64
base64_data = Base64.encode64 bin_data # => [String]
-
Пишем в файл в
бинарномрежимеFile.open('photo.jpg', 'wb') do |file| file.write Base64.decode64(base64_data) end # uJlu File.binwrite 'photo.jpg', Base64.decode64(base64_data)
-
Создаём временный файл
Tempfiletmp = Tempfile.new %w(document .jpg)
-
Переводим его в
бинарныйрежимtmp.binmode
-
Пишем в файл раскодированные
бинарныеданныеtmp.write Base64.decode64(base64_data)
-
Добавляем документ в модель пользователя
user.create_photo! image: tmp
-
Закрываем и удаляем файл
tmp.close tmp.unlink
Также можно использовать
strict_encode64иstrict_decode64.
Применялось для формирования экспортирования пользователя в json-объект вместе с файлами и обратно.