Отправка изображения через данные JSON - PullRequest
6 голосов
/ 07 февраля 2012

нуби, надеюсь, вы, ребята, не против! Я пытаюсь запросить мой пользователь / id / pictures.json, но все, что он возвращает, это атрибуты, потому что я сделал общий формат.json {render: json => @ photo.to_json ()}. У меня вопрос, как я могу создавать и инкапсулировать фактические данные из изображений, чтобы мой клиент мог превратить эти данные в изображение? А также, что мне нужно создать (по атрибутам) помимо пути к изображению (скажем, у вас были только бесполезные атрибуты, например: высота content_type, description, thumbnail file_name)?

это то, что я пытаюсь сделать в моем index.json.erb

}
  <% @photos.each do |photo|%>
   data: <%= StringIO.new(Base64.encode64(photo.public_filename(:large))) %>
  <%end%>
}

я возвращаюсь

{
 data: #<StringIO:0x1058a6cd0>

}

, который не является IMGdata, который я ищу находясь в поиске

Ответы [ 3 ]

9 голосов
/ 07 февраля 2012

Посмотрите на Data-URIs .По сути, они представляют собой объекты (документы) в кодировке Base64, отформатированные как URI

[{ "name":"red dot", "data": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="}, ...]

[ОБНОВЛЕНИЕ]

Вам необходимо прочитать файл и закодировать его как Base64 (вам также нужно убрать символы новой строки в рельсах 2.3.x)

data = ActiveSupport::Base64.encode64(File.read("/images/image1.png")).gsub("\n", '')
uri  = "data:image/png;base64,#{data}"
1 голос
/ 07 февраля 2012

Я думаю, что вы используете Ruby on Rails, не так ли?

Тогда есть несколько шагов, необходимых для загрузки изображения (например, png):

Созданиеmime type

Перейдите на config/initializers/mime_types.rb и вставьте Mime::Type.register "image/png", :png в конце.

Создайте изображение

Например, выможно использовать гем Chunky_PNG для создания изображения, см. http://rubygems.org/gems/chunky_png и https://github.com/wvanbergen/chunky_png/wiki

Подготовьте ваш контроллер

Вы должны сказать своему контроллеру,что он может принимать PNG.Измените ваш контроллер следующим образом

class UsersController < ApplicationController
  respond_to :json, :png

    def show
        # your own stuff
        # ...

        respond_with(response) do |format|
          format.json
          format.png do
            send_data ChunkyPNG::Image.new(width, height, ChunkyPNG::Color::TRANSPARENT), :type =>"image/png", :disposition => 'inline'
          end
        end
    end
end

Это создаст полностью прозрачное изображение.Если вы хотите что-то нарисовать в этом, посмотрите на документы в формате PNG.

0 голосов
/ 16 августа 2015

Это зависит от клиента, как это сделать на самом деле. Это работает для меня, может быть, стоит попробовать.

  render json: @thumbnail, type: :jpeg, content_type: 'image/jpeg'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...