如何使用cassandra cql存储二进制数据

时间:2012-01-29 20:33:19

标签: ruby-on-rails cassandra cql

我正在使用Ruby on Rails,我想直接将图像存储到cassandra数据库中。

如何将带有cassandra-cql gem的文件存储到cassandra数据库中? 如何在image_tag中显示此文件?

1 个答案:

答案 0 :(得分:1)

首先确保您的列族验证器是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]

要从rails提供此功能,您需要制作一个控件,其中包含使用send_data disposition => 'inline'来传输img的操作:

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链接到该控制器。看看this question for more info on streaming images from a controller