MongoDBへ画像ファイルをバイナリで保存/取得
MongDBへローカルファイルの画像をバイナリで保存/取得するサンプルコードです。
MongoDBへ画像ファイルをバイナリで保存
#!/usr/local/bin/ruby # -*- encoding: utf-8 -*- require 'mongo' #第1引数=保存する画像ファイル名,第2引数=保存先database,第3引数=保存先コレクション if (ARGV.size < 3) puts puts 'Usage: ARGV[0]=file_name ARGV[1]=db_name ARGV[2]=collection_name' puts exit end db_name = ARGV[1] coll_name = ARGV[2] db = Mongo::Connection.new.db(db_name) coll = db.collection(coll_name) file_name = File.basename(ARGV[0]) image = File.open(ARGV[0], "r+b") puts "insert to #{db_name}.#{coll_name} from local file '#{file_name}'" coll.insert({:image => BSON::Binary.new(image.read, BSON::Binary::SUBTYPE_BYTES), :file_name => file_name }) db.connection.close
使用例
[root@xxx ~]# ruby insert_image_to_mongodb.rb input.png test image_collection insert to test.image_collection from local file 'input.png'
MongoDBから画像ファイルを取得
#!/usr/local/bin/ruby # -*- encoding: utf-8 -*- require 'mongo' #第1引数=取得する画像ファイル名,第2引数=保存先database,第3引数=保存先コレクション if (ARGV.size < 3) puts puts 'Usage: ARGV[0]=file_name ARGV[1]=db_name ARGV[2]=collection_name' puts exit end db_name = ARGV[1] coll_name = ARGV[2] db = Mongo::Connection.new.db(db_name) coll = db.collection(coll_name) file_name = File.basename(ARGV[0]) result = coll.find_one({"file_name" => file_name}) puts "save image to local file as '#{file_name}'" File.open(file_name, "w+b").write(result['image'].to_s) db.connection.close
使用例
[root@xxx ~]# ruby get_image_from_mongodb.rb out.png test image_collection save image to local file as 'out.png'