Это то, что я делаю:base64 Изображение загружено с StringIO carrierwave драгоценный камень становится коррумпированной при загрузке в рельсах
В контроллере: -
dataurl = params[:dataURL]
io = FilelessIO.new(Base64.decode64(dataurl))
io.original_filename = "foobar.jpeg"
io.content_type = "image/jpeg"
p = SketchilyTest.new
p.image = io
p.save
Модель: -
class FilelessIO < StringIO
attr_accessor :original_filename
attr_accessor :content_type
end
class SketchilyTest < ActiveRecord::Base
attr_accessible :desc, :image
mount_uploader :image, BaseSixtyfourEncodedUploader
end
BaseSixtyfourEncodedUploader является простым загрузчиком драгоценного камня несущей.
Проблема в том, что я не получаю никаких ошибок d изображение загружается, но его повреждает.
Когда я пытаюсь открыть его в браузере я получаю эту ошибку:
The image “http://localhost:3000/uploads/sketchily_test/image/41/foobar.jpeg” cannot be displayed because it contains errors.
Также обратите внимание, что я в состоянии регенерировать изображение из моих base64_encoded данных из моей базы данных. Но не удалось сохранить его как jpeg-изображение с несущей.
что ваши PARAMS [: dataurl]? представление изображения - это данные: image/jpeg; base64,/9jblablablabla ....., is '/ 9jblablablabla .....', возможно, вы также фиксируете передние данные, поэтому он содержит ошибки – Nich
@ Нич, да в этом формате данные: image/jpeg; base64,/9j, я просто попытался сохранить dataurl. Нет необходимости в изображении, полученном в коде для сохранения изображения. –
Хмм, я имею в виду, что вы декодируете данные: image/jpeg; base64,/9jblablablabla или/9jblablablabla, неправильное декодирование может привести к повреждению изображения, я предлагаю вам попробовать декодировать URL-адрес и сделать это в консоли rails и сохранить его в File.new – Nich