-
Читаем бинарные данные
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)
-
Создаём временный файл
Tempfile
tmp = 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-объект вместе с файлами и обратно.