SpringデータMongoDB:バイナリファイルの保存、GridFSの例
MongoDBでは、GridFSを使用してバイナリファイルを格納できます。このチュートリアルでは、Spring Dataの `GridFsTemplate`を使用してMongoDBにイメージを格納/読み込む方法を説明します。
1. GridFS – サンプルを保存する(AnnotationのSpring設定)
イメージファイルを取得し、MongoDBに保存します。
SpringMongoConfig.java
package com.mkyong.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.config.AbstractMongoConfiguration; import org.springframework.data.mongodb.gridfs.GridFsTemplate; import com.mongodb.Mongo; import com.mongodb.MongoClient; /** ** ** Spring MongoDB configuration file ** ** /@Configuration public class SpringMongoConfig extends AbstractMongoConfiguration{ @Bean public GridFsTemplate gridFsTemplate() throws Exception { return new GridFsTemplate(mongoDbFactory(), mappingMongoConverter()); } @Override protected String getDatabaseName() { return "yourdb"; } @Override @Bean public Mongo mongo() throws Exception { return new MongoClient("127.0.0.1"); } }
GridFsAppStore.java
package com.mkyong.core; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.data.mongodb.gridfs.GridFsOperations; import com.mkyong.config.SpringMongoConfig; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; /** ** ** GridFs example ** ** @author mkyong ** ** / public class GridFsAppStore { public static void main(String[]args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringMongoConfig.class); GridFsOperations gridOperations = (GridFsOperations) ctx.getBean("gridFsTemplate"); DBObject metaData = new BasicDBObject(); metaData.put("extra1", "anything 1"); metaData.put("extra2", "anything 2"); InputStream inputStream = null; try { inputStream = new FileInputStream("/Users/mkyong/Downloads/testing.png"); gridOperations.store(inputStream, "testing.png", "image/png", metaData); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } System.out.println("Done"); } }
MongoDBコンソールを見て、保存されているものを確認してください。
> show dbs yourdb 0.203125GB > use yourdb switched to db yourdb > show collections fs.chunks fs.files system.indexes > db.fs.files.find() { "__id" : ObjectId("51641c5630045c9b3db35afc"), "chunkSize" : NumberLong(262144), "length" : NumberLong(4238), "md5" : "9969527cd95a5a573f15e953f0036800", "filename" : "testing.png", "contentType" : "image/png", "uploadDate" : ISODate("2013-04-09T13:49:10.104Z"), "aliases" : null, "metadata" : { "extra1" : "anything 1", "extra2" : "anything 2" } } > > db.fs.chunks.find() { "__id" : ObjectId("51641c5630045c9b3db35afd"), "files__id" : ObjectId("51641c5630045c9b3db35afc"), "n" : 0, "data" : BinData(0,"/9j/4AAQSkZJRgABAgAAZ......EQH/9k=") }
イメージの情報は
fs.files`に保存され、イメージのファイル(バイナリで変換されたもの)は
fs.chunks`に格納され、
id`と
filesid`を介してリンクされます。
2. GridFS – 読み込みの例(XMLファイルのSpringの設定)
上の画像ファイルをMongoDBから読み込んで別の画像として保存してください。
SpringConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <mongo:db-factory id="mongoDbFactory" dbname="yourdb"/> <mongo:mapping-converter id="converter"/> <bean name="gridFsTemplate" class="org.springframework.data.mongodb.gridfs.GridFsTemplate"> <constructor-arg ref="mongoDbFactory"/> <constructor-arg ref="converter"/> </bean> </beans>
GridFsAppStore.java
package com.mkyong.core; import java.io.IOException; import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.gridfs.GridFsOperations; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import com.mongodb.gridfs.GridFSDBFile; /** ** ** GridFs example ** ** @author mkyong ** ** / public class GridFsAppRead { public static void main(String[]args) { ApplicationContext ctx = new GenericXmlApplicationContext("SpringConfig.xml"); GridFsOperations gridOperations = (GridFsOperations) ctx.getBean("gridFsTemplate"); List<GridFSDBFile> result = gridOperations.find( new Query().addCriteria(Criteria.where("filename").is("testing.png"))); for (GridFSDBFile file : result) { try { System.out.println(file.getFilename()); System.out.println(file.getContentType()); //save as another image file.writeTo("/Users/mkyong/Downloads/new-testing.png"); } catch (IOException e) { e.printStackTrace(); } } System.out.println("Done"); } }
ソースコードをダウンロードする
ダウンロードする –
SpringMongoDB-GridFs-Example.zip
(24 KB)
参考文献
JavaDoc]。
http://static.springsource.org/spring-data/mongodb/docs/current/reference/html/mongo.core.html#gridfs
[Spring
データMongoDB GridFSのサポート]。リンク://mongodb/spring-data-mongodb-hello-world-example/[Springデータ
MongoDB Hello Worldの例]。リンク://mongodb/java-mongodb-save-image-example/[Java MongoDB:保存
画像例]