我正在使用Ruby on Rails,我想直接将图像存储到cassandra数据库中。
如何将带有cassandra-cql gem的文件存储到cassandra数据库中? 如何在image_tag中显示此文件?
答案 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。