[[mongodb-gridfs-component]]
= MongoDB GridFS Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-mongodb-gridfs/src/main/docs/mongodb-gridfs-component.adoc
:docTitle: MongoDB GridFS
:artifactId: camel-mongodb-gridfs
:description: Interact with MongoDB GridFS.
:since: 2.18
:supportLevel: Stable
:component-header: Both producer and consumer are supported

*Since Camel {since}*

*{component-header}*

Maven users will need to add the following dependency to their `pom.xml`
for this component:

[source,xml]
------------------------------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-mongodb-gridfs</artifactId>
    <version>x.y.z</version>
    <!-- use the same version as your Camel core version -->
</dependency>
------------------------------------------------------------

== URI format

------------------------------------------------------------------------------
mongodb-gridfs:connectionBean?database=databaseName&bucket=bucketName[&moreOptions...]
------------------------------------------------------------------------------

== MongoDB GridFS options


// component options: START
The MongoDB GridFS component supports 3 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
|===
// component options: END




// endpoint options: START
The MongoDB GridFS endpoint is configured using URI syntax:

----
mongodb-gridfs:connectionBean
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *connectionBean* | *Required* Name of com.mongodb.client.MongoClient to use. |  | String
|===


=== Query Parameters (18 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *bucket* (common) | Sets the name of the GridFS bucket within the database. Default is fs. | fs | String
| *database* (common) | *Required* Sets the name of the MongoDB database to target |  | String
| *readPreference* (common) | Sets a MongoDB ReadPreference on the Mongo connection. Read preferences set directly on the connection will be overridden by this setting. The com.mongodb.ReadPreference#valueOf(String) utility method is used to resolve the passed readPreference value. Some examples for the possible values are nearest, primary or secondary etc. |  | ReadPreference
| *writeConcern* (common) | Set the WriteConcern for write operations on MongoDB using the standard ones. Resolved from the fields of the WriteConcern class by calling the WriteConcern#valueOf(String) method. The value can be one of: ACKNOWLEDGED, W1, W2, W3, UNACKNOWLEDGED, JOURNALED, MAJORITY |  | WriteConcern
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *delay* (consumer) | Sets the delay between polls within the Consumer. Default is 500ms | 500 | long
| *fileAttributeName* (consumer) | If the QueryType uses a FileAttribute, this sets the name of the attribute that is used. Default is camel-processed. | camel-processed | String
| *initialDelay* (consumer) | Sets the initialDelay before the consumer will start polling. Default is 1000ms | 1000 | long
| *persistentTSCollection* (consumer) | If the QueryType uses a persistent timestamp, this sets the name of the collection within the DB to store the timestamp. | camel-timestamps | String
| *persistentTSObject* (consumer) | If the QueryType uses a persistent timestamp, this is the ID of the object in the collection to store the timestamp. | camel-timestamp | String
| *query* (consumer) | Additional query parameters (in JSON) that are used to configure the query used for finding files in the GridFsConsumer |  | String
| *queryStrategy* (consumer) | Sets the QueryStrategy that is used for polling for new files. Default is Timestamp. The value can be one of: TimeStamp, PersistentTimestamp, FileAttribute, TimeStampAndFileAttribute, PersistentTimestampAndFileAttribute | TimeStamp | QueryStrategy
| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. The value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *operation* (producer) | Sets the operation this endpoint will execute against GridFs. |  | String
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
|===
// endpoint options: END




== Configuration of database in Spring XML

The following Spring XML creates a bean defining the connection to a
MongoDB instance.

[source,xml]
----------------------------------------------------------------------------------------------------------------------------------
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="mongoBean" class="com.mongodb.Mongo">
        <constructor-arg name="host" value="${mongodb.host}" />
        <constructor-arg name="port" value="${mongodb.port}" />
    </bean>
</beans>
----------------------------------------------------------------------------------------------------------------------------------

== Sample route

The following route defined in Spring XML executes the operation
xref:mongodb-gridfs-component.adoc[*findOne*] on a collection.

*Get a file from GridFS*

[source,xml]
----------------------------------------------------------------------------------
<route>
  <from uri="direct:start" />
  <!-- using bean 'mongoBean' defined above -->
  <to uri="mongodb-gridfs:mongoBean?database=${mongodb.database}&amp;operation=findOne" />
  <to uri="direct:result" />
</route>
----------------------------------------------------------------------------------

 

== GridFS operations - producer endpoint

=== count

Returns the total number of file in the collection, returning an Integer
as the OUT message body.

[source,java]
---------------------------------------------------------------------------------
// from("direct:count").to("mongodb-gridfs?database=tickets&operation=count");
Integer result = template.requestBodyAndHeader("direct:count", "irrelevantBody");
assertTrue("Result is not of type Long", result instanceof Integer);
---------------------------------------------------------------------------------

You can provide a filename header to provide a count of files matching
that filename.

[source,java]
-------------------------------------------------------------------------------
Map<String, Object> headers = new HashMap<String, Object>();
headers.put(Exchange.FILE_NAME, "filename.txt");
Integer count = template.requestBodyAndHeaders("direct:count", query, headers);
-------------------------------------------------------------------------------

=== listAll

Returns an Reader that lists all the filenames and their IDs in a tab
separated stream.

----------------------------------------------------------------------------------
// from("direct:listAll").to("mongodb-gridfs?database=tickets&operation=listAll");
Reader result = template.requestBodyAndHeader("direct:listAll", "irrelevantBody");

filename1.txt   1252314321
filename2.txt   2897651254
----------------------------------------------------------------------------------

 

=== *findOne*

Finds a file in the GridFS system and sets the body to an InputStream of
the content. Also provides the metadata has headers. It uses
Exchange.FILE_NAME from the incoming headers to determine the file to find.

[source,java]
-------------------------------------------------------------------------------------------------
// from("direct:findOne").to("mongodb-gridfs?database=tickets&operation=findOne");
Map<String, Object> headers = new HashMap<String, Object>();
headers.put(Exchange.FILE_NAME, "filename.txt");
InputStream result = template.requestBodyAndHeaders("direct:findOne", "irrelevantBody", headers);
-------------------------------------------------------------------------------------------------

 

=== create

Creates a new file in the GridFs database. It uses the
Exchange.FILE_NAME from the incoming headers for the name and the body
contents (as an InputStream) as the content.

[source,java]
------------------------------------------------------------------------
// from("direct:create").to("mongodb-gridfs?database=tickets&operation=create");
Map<String, Object> headers = new HashMap<String, Object>();
headers.put(Exchange.FILE_NAME, "filename.txt");
InputStream stream = ... the data for the file ...
template.requestBodyAndHeaders("direct:create", stream, headers);
------------------------------------------------------------------------

=== remove

Removes a file from the GridFS database.

[source,java]
------------------------------------------------------------------------
// from("direct:remove").to("mongodb-gridfs?database=tickets&operation=remove");
Map<String, Object> headers = new HashMap<String, Object>();
headers.put(Exchange.FILE_NAME, "filename.txt");
template.requestBodyAndHeaders("direct:remove", "", headers);
------------------------------------------------------------------------


include::camel-spring-boot::page$mongodb-gridfs-starter.adoc[]
