Как хранить двоичные данные с помощью cassandra cql - PullRequest
0 голосов
/ 30 января 2012

Я использую Ruby on Rails и хочу напрямую хранить изображения в базе данных cassandra.

Как я могу хранить файлы с гемом cassandra-cql в базе данных cassandra? И как я могу отобразить этот файл в image_tag?

1 Ответ

1 голос
/ 30 января 2012

Сначала убедитесь, что ваш валидатор семейства столбцов - BytesType. Тогда вы можете вставить свой img в Cassandra следующим образом:

File.open('/tmp/image.jpg', 'r') do |f|
  img = f.read.force_encoding('ASCII-8BIT') # ensure cassandra-cql knows this is binary
  handle.execute("insert into img (KEY, colA) values ('rowA', ?)", img);
end

Чтобы получить его обратно:

img = handle.execute("select colA from img where KEY = 'rowA'").fetch[0]

Чтобы обслужить это из рельсов, вам нужно создать контроллер с действием для потоковой передачи img, используя send_data с disposition => 'inline':

class ImgController < ApplicationController
  def img
    row_key = params['row_key']
    col_name = params['col_name']
    img = handle.execute("select ? from img where KEY = ?", col_name, row_key).fetch[0]
    send_data(img, :filename => 'img.jpg', :type => 'image/jpeg', :disposition => 'inline')
  end
end

Затем вы можете использовать image_tag для связи с этим контроллером. Посмотрите на этот вопрос для получения дополнительной информации о потоковой передаче изображений с контроллера .

...