[[azure-blob-component]]
= Azure Storage Blob Service Component
:page-source: components/camel-azure/src/main/docs/azure-blob-component.adoc

*Available as of Camel version 2.19*

The Azure Blob component supports storing and retrieving the blobs to/from
https://azure.microsoft.com/services/storage/blobs/[Azure Storage Blob] service.

Prerequisites

You must have a valid Windows Azure Storage account. More information is available at
https://docs.microsoft.com/azure/[Azure Documentation Portal].

== URI Format

[source,java]
------------------------------
azure-blob://accountName/containerName[/blobName][?options]
------------------------------

In most cases a blobName is required and the blob will be created if it does not already exist. +
 You can append query options to the URI in the following format,
?options=value&option2=value&...

For example in order to download a blob content from the public block blob `blockBlob` 
located on the `container1` in the `camelazure` storage account, use the following snippet:

[source,java]
--------------------------------------------------------------------------------
from("azure-blob:/camelazure/container1/blockBlob").
to("file://blobdirectory");
--------------------------------------------------------------------------------

== URI Options


// component options: START
The Azure Storage Blob Service component supports 2 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *configuration* (advanced) | The Blob Service configuration |  | BlobServiceConfiguration
| *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 Azure Storage Blob Service endpoint is configured using URI syntax:

----
azure-blob:containerOrBlobUri
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *containerOrBlobUri* | *Required* Container or Blob compact Uri |  | String
|===


=== Query Parameters (21 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *azureBlobClient* (common) | The blob service client |  | CloudBlob
| *blobOffset* (common) | Set the blob offset for the upload or download operations, default is 0 | 0 | Long
| *blobType* (common) | Set a blob type, 'blockblob' is default | blockblob | BlobType
| *closeStreamAfterRead* (common) | Close the stream after read or keep it open, default is true | true | boolean
| *credentials* (common) | Set the storage credentials, required in most cases |  | StorageCredentials
| *dataLength* (common) | Set the data length for the download or page blob upload operations |  | Long
| *fileDir* (common) | Set the file directory where the downloaded blobs will be saved to |  | String
| *publicForRead* (common) | Storage resources can be public for reading their content, if this property is enabled then the credentials do not have to be set | false | boolean
| *streamReadSize* (common) | Set the minimum read size in bytes when reading the blob content |  | int
| *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
| *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. |  | ExchangePattern
| *blobMetadata* (producer) | Set the blob meta-data |  | Map
| *blobPrefix* (producer) | Set a prefix which can be used for listing the blobs |  | String
| *closeStreamAfterWrite* (producer) | Close the stream after write or keep it open, default is true | true | 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
| *operation* (producer) | Blob service operation hint to the producer | listBlobs | BlobServiceOperations
| *streamWriteSize* (producer) | Set the size of the buffer for writing block and page blocks |  | int
| *useFlatListing* (producer) | Specify if the flat or hierarchical blob listing should be used | true | boolean
| *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
// spring-boot-auto-configure options: START
== Spring Boot Auto-Configuration

When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

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


The component supports 20 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.azure-blob.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
| *camel.component.azure-blob.configuration.account-name* | Set the Azure account name |  | String
| *camel.component.azure-blob.configuration.azure-blob-client* | The blob service client |  | CloudBlob
| *camel.component.azure-blob.configuration.blob-metadata* | Set the blob meta-data |  | Map
| *camel.component.azure-blob.configuration.blob-name* | Blob name, required for most operations |  | String
| *camel.component.azure-blob.configuration.blob-offset* | Set the blob offset for the upload or download operations, default is 0 | 0 | Long
| *camel.component.azure-blob.configuration.blob-prefix* | Set a prefix which can be used for listing the blobs |  | String
| *camel.component.azure-blob.configuration.blob-type* | Set a blob type, 'blockblob' is default |  | BlobType
| *camel.component.azure-blob.configuration.close-stream-after-read* | Close the stream after read or keep it open, default is true | true | Boolean
| *camel.component.azure-blob.configuration.close-stream-after-write* | Close the stream after write or keep it open, default is true | true | Boolean
| *camel.component.azure-blob.configuration.container-name* | Set the blob service container name |  | String
| *camel.component.azure-blob.configuration.credentials* | Set the storage credentials, required in most cases |  | StorageCredentials
| *camel.component.azure-blob.configuration.data-length* | Set the data length for the download or page blob upload operations |  | Long
| *camel.component.azure-blob.configuration.file-dir* | Set the file directory where the downloaded blobs will be saved to |  | String
| *camel.component.azure-blob.configuration.operation* | Blob service operation hint to the producer |  | BlobServiceOperations
| *camel.component.azure-blob.configuration.public-for-read* | Storage resources can be public for reading their content, if this property is enabled then the credentials do not have to be set | false | Boolean
| *camel.component.azure-blob.configuration.stream-read-size* | Set the minimum read size in bytes when reading the blob content |  | Integer
| *camel.component.azure-blob.configuration.stream-write-size* | Set the size of the buffer for writing block and page blocks |  | Integer
| *camel.component.azure-blob.configuration.use-flat-listing* | Specify if the flat or hierarchical blob listing should be used | true | Boolean
| *camel.component.azure-blob.enabled* | Enable azure-blob component | true | Boolean
|===
// spring-boot-auto-configure options: END




Required Azure Storage Blob Service component options

You have to provide the containerOrBlob name and the credentials if the private blob needs to be accessed.

== Usage

=== Message headers set by the Azure Storage Blob Service producer

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Header |Type |Description
|`CamelFileName` |`String` |The file name for the downloaded blob content.
|=======================================================================

=== Message headers set by the Azure Storage Blob Service producer consumer

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Header |Type |Description
|`CamelFileName` |`String` |The file name for the downloaded blob content.
|=======================================================================


=== Azure Blob Service operations

*Operations common to all block types*

[width="100%",cols="20%,80%",options="header",]
|===
|Operation |Description

|`getBlob`  |Get the content of the blob. You can restrict the output of this operation to a blob range.
|`deleteBlob`  |Delete the blob.
|`listBlobs`  |List the blobs.

|===

*Block blob operations*

[width="100%",cols="20%,80%",options="header",]
|===
|Operation |Description

|`updateBlockBlob`  |Put block blob content that either creates a new block blob or overwrites the existing block blob content.
|`uploadBlobBlocks`  |Upload block blob content, by first generating a sequence of blob blocks and then committing them to a blob. If you enable the message *CommitBlockListLater* property, you can execute the commit later with the `commitBlobBlockList` operation. You can later update individual block blobs.
|`commitBlobBlockList`  |Commit a sequence of blob blocks to the block list that you previously uploaded to the blob service (by using the `updateBlockBlob` operation with the message *CommitBlockListLater* property enabled).
|`getBlobBlockList`  |Get the block blob list.

|===

*Append blob operations*

[width="100%",cols="20%,80%",options="header",]
|===
|Operation |Description

|`createAppendBlob`  |Create an append block. By default, if the block already exists then it is not reset. Note that you can alternately create an append blob by enabling the message *AppendBlobCreated* property and using the `updateAppendBlob` operation. 

|`updateAppendBlob`  |Append the new content to the blob. This operation also creates the blob if it does not already exist and if you enabled a message *AppendBlobCreated* property.

|===


*Page Block operations*

[width="100%",cols="20%,80%",options="header",]
|===
|Operation |Description

|`createPageBlob`  |Create a page block. By default, if the block already exists then it is not reset. Note that you can also create a page blob (and set its contents) by enabling a message *PageBlobCreated* property and by using the `updatePageBlob` operation.
|`updatePageBlob`  |Create a page block (unless you enable a message *PageBlobCreated* property and the identically named block already exists) and set the content of this blob.
|`resizePageBlob`  |Resize the page blob.
|`clearPageBlob`  |Clear the page blob.
|`getPageBlobRanges`  |Get the page blob page ranges.

|===



=== Azure Blob Client configuration

If your Camel application is running behind a firewall or if you need more control over the Azure Blob Client configuration, you can create your own instance:

[source,java]
----
StorageCredentials credentials = new StorageCredentialsAccountAndKey(accountName, accessKey);
CloudBlob client = new CloudBlockBlob(URI.create("https://"
                    + accountName + ".blob.core.windows.net/" + containerName 
                    + "/" + fileName), credentials);
registry.bind("azureBlobClient", client);
----

Then refer to this instance in your Camel `azure-blob` component configuration:

[source,java]
----
from("azure-blob://" + accountName + "/" + containerName + "/" + fileName + "?azureBlobClient=#client")
.to("mock:result");
----

== Dependencies

Maven users will need to add the following dependency to their `pom.xml`.

*pom.xml*

[source,xml]
----
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-azure</artifactId>
    <version>${camel-version}</version>
</dependency>
----

where `${camel-version}` must be replaced by the actual version of Camel.
