diff --git a/spring-data-mongodb/.classpath b/spring-data-mongodb/.classpath
deleted file mode 100644
index a86150fe21..0000000000
--- a/spring-data-mongodb/.classpath
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/spring-data-mongodb/.project b/spring-data-mongodb/.project
deleted file mode 100644
index e928c256a4..0000000000
--- a/spring-data-mongodb/.project
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
- spring-data-mongodb
- NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- org.springframework.ide.eclipse.core.springbuilder
-
-
-
-
- org.eclipse.m2e.core.maven2Builder
-
-
-
-
-
- org.springframework.ide.eclipse.core.springnature
- org.eclipse.jdt.core.javanature
- org.eclipse.m2e.core.maven2Nature
-
-
diff --git a/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java b/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java
index d699720de8..6910245b2b 100644
--- a/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java
+++ b/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java
@@ -11,6 +11,7 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.core.convert.CustomConversions;
+import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import com.mongodb.Mongo;
@@ -52,4 +53,9 @@ public class MongoConfig extends AbstractMongoConfiguration {
converters.add(new UserWriterConverter());
return new CustomConversions(converters);
}
+
+ @Bean
+ public GridFsTemplate gridFsTemplate() throws Exception {
+ return new GridFsTemplate(mongoDbFactory(), mappingMongoConverter());
+ }
}
diff --git a/spring-data-mongodb/src/main/resources/mongoConfig.xml b/spring-data-mongodb/src/main/resources/mongoConfig.xml
index 1a9d161ad6..2b32863fb6 100644
--- a/spring-data-mongodb/src/main/resources/mongoConfig.xml
+++ b/spring-data-mongodb/src/main/resources/mongoConfig.xml
@@ -10,15 +10,19 @@
http://www.springframework.org/schema/context/spring-context-3.2.xsd"
>
-
-
-
+
+
+
+
+
+
+
+
-
+
-
diff --git a/spring-data-mongodb/src/main/resources/test.png b/spring-data-mongodb/src/main/resources/test.png
new file mode 100644
index 0000000000..c3b5e80276
Binary files /dev/null and b/spring-data-mongodb/src/main/resources/test.png differ
diff --git a/spring-data-mongodb/src/test/java/org/baeldung/gridfs/GridFSIntegrationTest.java b/spring-data-mongodb/src/test/java/org/baeldung/gridfs/GridFSIntegrationTest.java
new file mode 100644
index 0000000000..06ad21647b
--- /dev/null
+++ b/spring-data-mongodb/src/test/java/org/baeldung/gridfs/GridFSIntegrationTest.java
@@ -0,0 +1,227 @@
+package org.baeldung.gridfs;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.Matchers.nullValue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+import org.baeldung.config.MongoConfig;
+import org.junit.After;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.gridfs.GridFsResource;
+import org.springframework.data.mongodb.gridfs.GridFsTemplate;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import com.mongodb.BasicDBObject;
+import com.mongodb.DBObject;
+import com.mongodb.gridfs.GridFSDBFile;
+
+@ContextConfiguration("file:src/main/resources/mongoConfig.xml")
+@RunWith(SpringJUnit4ClassRunner.class)
+public class GridFSIntegrationTest {
+
+ private final Logger logger = LoggerFactory.getLogger(getClass());
+
+ @Autowired
+ private GridFsTemplate gridFsTemplate;
+
+ @After
+ public void tearDown() {
+ List fileList = gridFsTemplate.find(null);
+ for (GridFSDBFile file : fileList) {
+ gridFsTemplate.delete(new Query(Criteria.where("filename").is(file.getFilename())));
+ }
+ }
+
+ @Test
+ public void whenStoringFileWithMetadata_thenFileAndMetadataAreStored() {
+ DBObject metaData = new BasicDBObject();
+ metaData.put("user", "alex");
+ InputStream inputStream = null;
+ String id = "";
+ try {
+ inputStream = new FileInputStream("src/main/resources/test.png");
+ id = gridFsTemplate.store(inputStream, "test.png", "image/png", metaData).getId().toString();
+ } catch (FileNotFoundException ex) {
+ logger.error("File not found", ex);
+ } finally {
+ if (inputStream != null) {
+ try {
+ inputStream.close();
+ } catch (IOException ex) {
+ logger.error("Failed to close", ex);
+ }
+ }
+ }
+
+ assertNotNull(id);
+ }
+
+ @Test
+ public void givenFileWithMetadataExist_whenFindingFileById_thenFileWithMetadataIsFound() {
+ DBObject metaData = new BasicDBObject();
+ metaData.put("user", "alex");
+ InputStream inputStream = null;
+ String id = "";
+ try {
+ inputStream = new FileInputStream("src/main/resources/test.png");
+ id = gridFsTemplate.store(inputStream, "test.png", "image/png", metaData).getId().toString();
+ } catch (FileNotFoundException ex) {
+ logger.error("File not found", ex);
+ } finally {
+ if (inputStream != null) {
+ try {
+ inputStream.close();
+ } catch (IOException ex) {
+ logger.error("Failed to close", ex);
+ }
+ }
+ }
+
+ GridFSDBFile gridFSDBFile = gridFsTemplate.findOne(new Query(Criteria.where("_id").is(id)));
+
+ assertNotNull(gridFSDBFile);
+ assertNotNull(gridFSDBFile.getInputStream());
+ assertThat(gridFSDBFile.numChunks(), is(1));
+ assertThat(gridFSDBFile.containsField("filename"), is(true));
+ assertThat(gridFSDBFile.get("filename"), is("test.png"));
+ assertThat(gridFSDBFile.getId(), is(id));
+ assertThat(gridFSDBFile.keySet().size(), is(9));
+ assertNotNull(gridFSDBFile.getMD5());
+ assertNotNull(gridFSDBFile.getUploadDate());
+ assertNull(gridFSDBFile.getAliases());
+ assertNotNull(gridFSDBFile.getChunkSize());
+ assertThat(gridFSDBFile.getContentType(), is("image/png"));
+ assertThat(gridFSDBFile.getFilename(), is("test.png"));
+ assertThat(gridFSDBFile.getMetaData().get("user"), is("alex"));
+ }
+
+ @Test
+ public void givenMetadataAndFilesExist_whenFindingAllFiles_thenFilesWithMetadataAreFound() {
+ DBObject metaDataUser1 = new BasicDBObject();
+ metaDataUser1.put("user", "alex");
+ DBObject metaDataUser2 = new BasicDBObject();
+ metaDataUser2.put("user", "david");
+ InputStream inputStream = null;
+
+ try {
+ inputStream = new FileInputStream("src/main/resources/test.png");
+ gridFsTemplate.store(inputStream, "test.png", "image/png", metaDataUser1);
+ gridFsTemplate.store(inputStream, "test.png", "image/png", metaDataUser2);
+ } catch (FileNotFoundException ex) {
+ logger.error("File not found", ex);
+ } finally {
+ if (inputStream != null) {
+ try {
+ inputStream.close();
+ } catch (IOException ex) {
+ logger.error("Failed to close", ex);
+ }
+ }
+ }
+
+ List gridFSDBFiles = gridFsTemplate.find(null);
+
+ assertNotNull(gridFSDBFiles);
+ assertThat(gridFSDBFiles.size(), is(2));
+ }
+
+ @Test
+ public void givenMetadataAndFilesExist_whenFindingAllFilesOnQuery_thenFilesWithMetadataAreFoundOnQuery() {
+ DBObject metaDataUser1 = new BasicDBObject();
+ metaDataUser1.put("user", "alex");
+ DBObject metaDataUser2 = new BasicDBObject();
+ metaDataUser2.put("user", "david");
+ InputStream inputStream = null;
+
+ try {
+ inputStream = new FileInputStream("src/main/resources/test.png");
+ gridFsTemplate.store(inputStream, "test.png", "image/png", metaDataUser1);
+ gridFsTemplate.store(inputStream, "test.png", "image/png", metaDataUser2);
+ } catch (FileNotFoundException ex) {
+ logger.error("File not found", ex);
+ } finally {
+ if (inputStream != null) {
+ try {
+ inputStream.close();
+ } catch (IOException ex) {
+ logger.error("Failed to close", ex);
+ }
+ }
+ }
+
+ List gridFSDBFiles = gridFsTemplate.find(new Query(Criteria.where("metadata.user").is("alex")));
+
+ assertNotNull(gridFSDBFiles);
+ assertThat(gridFSDBFiles.size(), is(1));
+ }
+
+ @Test
+ public void givenFileWithMetadataExist_whenDeletingFileById_thenFileWithMetadataIsDeleted() {
+ DBObject metaData = new BasicDBObject();
+ metaData.put("user", "alex");
+ InputStream inputStream = null;
+ String id = "";
+ try {
+ inputStream = new FileInputStream("src/main/resources/test.png");
+ id = gridFsTemplate.store(inputStream, "test.png", "image/png", metaData).getId().toString();
+ } catch (FileNotFoundException ex) {
+ logger.error("File not found", ex);
+ } finally {
+ if (inputStream != null) {
+ try {
+ inputStream.close();
+ } catch (IOException ex) {
+ logger.error("Failed to close", ex);
+ }
+ }
+ }
+
+ gridFsTemplate.delete(new Query(Criteria.where("_id").is(id)));
+
+ assertThat(gridFsTemplate.findOne(new Query(Criteria.where("_id").is(id))), is(nullValue()));
+ }
+
+ @Test
+ public void givenFileWithMetadataExist_whenGettingFileByResource_thenFileWithMetadataIsGotten() {
+ DBObject metaData = new BasicDBObject();
+ metaData.put("user", "alex");
+ InputStream inputStream = null;
+ String id = "";
+ try {
+ inputStream = new FileInputStream("src/main/resources/test.png");
+ id = gridFsTemplate.store(inputStream, "test.png", "image/png", metaData).getId().toString();
+ } catch (FileNotFoundException ex) {
+ logger.error("File not found", ex);
+ } finally {
+ if (inputStream != null) {
+ try {
+ inputStream.close();
+ } catch (IOException ex) {
+ logger.error("Failed to close", ex);
+ }
+ }
+ }
+
+ GridFsResource[] gridFsResource = gridFsTemplate.getResources("test*");
+
+ assertNotNull(gridFsResource);
+ assertEquals(gridFsResource.length, 1);
+ assertThat(gridFsResource[0].getFilename(), is("test.png"));
+ }
+}