Browse Source

DATAMONGO-1813 - Add GridFsOperations.getResource(GridFSFile).

We now provide GridFsOperations.getResource(GridFSFile) to create GridFsResource without a database lookup. This allows direct creation of GridFsResource for GridFSFile.

Original pull request: #543.
pull/544/head
Hartmut Lang 8 years ago committed by Mark Paluch
parent
commit
aab86d23c9
  1. 8
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsOperations.java
  2. 14
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java
  3. 16
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIntegrationTests.java

8
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsOperations.java

@ -34,6 +34,7 @@ import com.mongodb.client.gridfs.GridFSFindIterable;
* @author Thomas Darimont * @author Thomas Darimont
* @author Martin Baumgartner * @author Martin Baumgartner
* @author Christoph Strobl * @author Christoph Strobl
* @author Hartmut Lang
*/ */
public interface GridFsOperations extends ResourcePatternResolver { public interface GridFsOperations extends ResourcePatternResolver {
@ -157,6 +158,13 @@ public interface GridFsOperations extends ResourcePatternResolver {
*/ */
GridFsResource getResource(String filename); GridFsResource getResource(String filename);
/**
* Returns the {@link GridFsResource} for a {@link com.mongodb.client.gridfs.model.GridFSFile}.
* @param file must not be {@literal null}.
* @return the resource for the file.
*/
GridFsResource getResource(com.mongodb.client.gridfs.model.GridFSFile file);
/** /**
* Returns all {@link GridFsResource}s matching the given file name pattern. * Returns all {@link GridFsResource}s matching the given file name pattern.
* *

14
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java

@ -51,6 +51,7 @@ import com.mongodb.client.gridfs.model.GridFSUploadOptions;
* @author Martin Baumgartner * @author Martin Baumgartner
* @author Christoph Strobl * @author Christoph Strobl
* @author Mark Paluch * @author Mark Paluch
* @author Hartmut Lang
*/ */
public class GridFsTemplate implements GridFsOperations, ResourcePatternResolver { public class GridFsTemplate implements GridFsOperations, ResourcePatternResolver {
@ -228,13 +229,22 @@ public class GridFsTemplate implements GridFsOperations, ResourcePatternResolver
public GridFsResource getResource(String location) { public GridFsResource getResource(String location) {
GridFSFile file = findOne(query(whereFilename().is(location))); GridFSFile file = findOne(query(whereFilename().is(location)));
return file != null ? new GridFsResource(file, getGridFs().openDownloadStream(location)) : null; return file != null ? getResource(file) : null;
} }
/* /*
* (non-Javadoc) * (non-Javadoc)
* @see org.springframework.core.io.support.ResourcePatternResolver#getResources(java.lang.String) * @see org.springframework.data.mongodb.gridfs.GridFsOperations#getResource(com.mongodb.client.gridfs.model.GridFSFile)
*/ */
public GridFsResource getResource(GridFSFile file) {
return new GridFsResource(file, getGridFs().openDownloadStream(file.getFilename()));
}
/*
* (non-Javadoc)
* @see org.springframework.core.io.support.ResourcePatternResolver#getResources(java.lang.String)
*/
public GridFsResource[] getResources(String locationPattern) { public GridFsResource[] getResources(String locationPattern) {
if (!StringUtils.hasText(locationPattern)) { if (!StringUtils.hasText(locationPattern)) {

16
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIntegrationTests.java

@ -42,6 +42,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.mongodb.MongoGridFSException; import com.mongodb.MongoGridFSException;
import com.mongodb.client.gridfs.GridFSFindIterable; import com.mongodb.client.gridfs.GridFSFindIterable;
import com.mongodb.client.gridfs.model.GridFSFile;
/** /**
* Integration tests for {@link GridFsTemplate}. * Integration tests for {@link GridFsTemplate}.
@ -50,6 +51,7 @@ import com.mongodb.client.gridfs.GridFSFindIterable;
* @author Philipp Schneider * @author Philipp Schneider
* @author Thomas Darimont * @author Thomas Darimont
* @author Martin Baumgartner * @author Martin Baumgartner
* @author Hartmut Lang
*/ */
@RunWith(SpringJUnit4ClassRunner.class) @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:gridfs/gridfs.xml") @ContextConfiguration("classpath:gridfs/gridfs.xml")
@ -225,6 +227,20 @@ public class GridFsTemplateIntegrationTests {
assertThatThrownBy(() -> result.getContentType()).isInstanceOf(MongoGridFSException.class); assertThatThrownBy(() -> result.getContentType()).isInstanceOf(MongoGridFSException.class);
} }
@Test // DATAMONGO-1813
public void convertFileToResource() throws IOException {
Document metadata = new Document("key", "value");
ObjectId reference = operations.store(resource.getInputStream(), "foobar", metadata);
List<com.mongodb.client.gridfs.model.GridFSFile> files = new ArrayList<com.mongodb.client.gridfs.model.GridFSFile>();
GridFSFile file = operations.findOne(query(whereMetaData("key").is("value")));
GridFsResource result = operations.getResource(file);
assertThat(result.contentLength()).isEqualTo(resource.contentLength());
assertThat(((BsonObjectId) result.getId()).getValue()).isEqualTo(reference);
}
class Metadata { class Metadata {
String version; String version;
} }

Loading…
Cancel
Save