13.6. 使用方法
例如,若要从 camelazure
存储帐户中的 container1
上 block blob hello.txt
下载 blob 内容,请使用以下片断:
from("azure-storage-blob://camelazure/container1?blobName=hello.txt&credentialType=SHARED_ACCOUNT_KEY&accessKey=RAW(yourAccessKey)").to("file://blobdirectory");
from("azure-storage-blob://camelazure/container1?blobName=hello.txt&credentialType=SHARED_ACCOUNT_KEY&accessKey=RAW(yourAccessKey)").to("file://blobdirectory");
13.6.1. 消息标头 复制链接链接已复制到粘贴板!
Azure Storage Blob Service 组件支持 63 个消息标头,如下所列:
标头 | 变量名称 | 类型 | 操作 | 描述 |
---|---|---|---|---|
|
|
| All | 引发 {@link RuntimeException} 的一个可选超时值。 |
|
|
| 与容器和 blob 相关的操作 | 与容器或 blob 关联的元数据。 |
|
|
|
|
指定此容器中的数据如何供公共使用。传递 |
|
|
| 与容器和 blob 相关的操作 | 它包含将各种请求成功操作的值限制到存在的条件。这些条件完全是可选的。 |
|
|
|
| 列出特定 blob 的详细信息 |
|
|
|
| 过滤结果,以仅返回名称以指定前缀开头的 Blob。可能为空,以返回所有 Blob。 |
|
|
|
| 指定要返回的最大 Blob 数量,包括所有 BlobPrefix 元素。如果请求没有指定 maxResultsPerPage 或指定大于 5,000 个值,则服务器将最多返回 5,000 个项目。 |
|
|
|
| 定义可用于在 {@link BlobContainerClient} 对象上配置对 listBlobsFlatSegment 的调用行为的选项。 |
|
|
|
| 一组操作的附加参数。 |
|
|
|
| 定义 AccessTier 的值。 |
|
|
| 与上传 blob 相关的大多数操作 | 块内容的 MD5 哈希。此哈希用于在传输过程中验证块的完整性。当指定此标头时,存储服务会将到达此标头值的内容哈希进行比较。请注意,这个 MD5 哈希没有存储在 blob 中。如果两个哈希不匹配,则操作将失败。 |
|
|
| 与页面 blob 相关的操作 | {@link PageRange} 对象。如果页面必须与 512 字节边界一致,起始偏移必须是 512 的 modulus,并且最终偏移必须是 512 - 1 的 modulus。有效字节范围的示例为 0-511、512-1023 等。 |
|
|
|
|
当设置为 |
|
|
|
|
当设置为 |
|
|
|
|
当 设置为 |
|
|
|
| 指定要返回的块类型。 |
|
|
|
| 指定页面 blob 的最大大小,最多 8 TB。页面 Blob 大小必须与 512 字节边界一致。 |
|
|
|
| 用户控制的值可用于跟踪请求。序列号的值必须在 0 到 2^63 - 1 之间。默认值为 0。 |
|
|
|
| 指定删除此 blob 上的快照的行为。\{@code Include} 将删除基础 blob 和所有快照。\{@code Only} 将只删除快照。如果删除了快照,则必须传递 null。 |
|
|
|
| {@link ListBlobContainersOptions},用于指定服务应返回哪些数据。 |
|
|
|
| {@link ParallelTransferOptions} 用于下载文件。忽略并行传输参数的数量。 |
|
|
|
| 下载的 Blob 将保存到的文件的目录。 |
|
|
|
| 覆盖 URL 下载链接的默认过期(millis)。 |
|
|
| 与 blob 相关的操作 | 覆盖/设置交换标头上的 blob 名称。 |
|
|
| 与容器和 blob 相关的操作 | 覆盖/设置交换标头上的容器名称。 |
|
|
| All | 指定要执行的制作者操作,请参阅此页面上的与制作者操作相关的文档。 |
|
|
|
| 过滤结果,以仅返回名称与指定正则表达式匹配的 Blob。可以为空返回所有.如果设置了前缀和正则表达式,则 regex 将采用优先级和前缀,并忽略前缀。 |
|
|
|
| 它过滤结果,以大约在开始时间后返回事件。注意:也可以返回属于上一小时的几个事件。可能会缺少几个属于此小时的事件;为了确保返回一小时的所有事件,请按小时舍入开始时间。 |
|
|
|
| 它过滤结果,以大约在结束时间前返回事件。注意:也可以返回属于下一个小时的几个事件。可能缺少几小时属于此小时的几个事件;为了确保返回一小时的所有事件,请按小时向上舍入结束时间。 |
|
|
|
| 这提供了在服务调用期间通过 Http 管道传递的额外上下文。 |
|
|
|
| 在复制 blob 操作中用作源帐户名称的源 blob 帐户名称 |
|
|
|
| 在复制 Blob 操作中用作源容器名称的源 blob 容器名称 |
13.6.2. 由组件制作者或消费者设置的消息标头 复制链接链接已复制到粘贴板!
标头 | 变量名称 | 类型 | 描述 |
---|---|---|---|
|
|
| blob 的访问层。 |
|
|
| 当 blob 访问层最后一次更改时,日期时间。 |
|
|
| blob 的存档状态。 |
|
|
| blob 的创建时间。 |
|
|
| 页面 blob 的当前序列号。 |
|
|
| blob 的大小。 |
|
|
| blob 的类型。 |
|
|
| 为 blob 指定的缓存控制。 |
|
|
| 提交到 append blob 的块数 |
|
|
| 为 blob 指定的内容分布。 |
|
|
| 为 blob 指定的内容编码。 |
|
|
| 为 blob 指定的内容语言。 |
|
|
| 为 blob 指定的内容 MD5。 |
|
|
| 为 blob 指定的内容类型。 |
|
|
| 当 blob 完成的最后一个复制操作时,日期时间。 |
|
|
| blob 的最后增量复制快照的快照标识符。 |
|
|
| 在 blob 上执行的最后一个复制操作的标识符。 |
|
|
| 在 blob 上执行的最后一个复制操作的进度。 |
|
|
| 在 blob 上执行的最后一个复制操作的来源。 |
|
|
| 在 blob 上执行的最后一个复制操作的状态。 |
|
|
| blob 上最后一次复制操作的描述。 |
|
|
| blob 的 E Tag |
|
|
| 表示 blob 的访问层是否从 blob 属性中推断出来的标志。 |
|
|
| 表示 blob 是否已递增复制。 |
|
|
| 表示在服务器中是否加密了 blob 内容的标志。 |
|
|
| 最后一次修改 Blob 时的日期。 |
|
|
| blob 上的租期类型。 |
|
|
| blob 上租期的状态。 |
|
|
| blob 上租期的状态。 |
|
|
| 与 blob 关联的其他元数据。 |
|
|
| 块提交到块 blob 的偏移量。 |
|
|
|
从操作 |
|
|
|
由 |
|
|
| 返回可供用户使用的非稀疏 httpHeaders。 |
13.6.3. 高级 Azure Storage Blob 配置 复制链接链接已复制到粘贴板!
如果您的 Camel 应用程序在防火墙后面运行,或者需要对 BlobServiceClient
实例配置有更多控制,您可以创建自己的实例:
然后,在 Camel azure-storage-blob
组件配置中引用此实例:
from("azure-storage-blob://cameldev/container1?blobName=myblob&serviceClient=#client") .to("mock:result");
from("azure-storage-blob://cameldev/container1?blobName=myblob&serviceClient=#client")
.to("mock:result");
13.6.4. 在 registry 中自动检测 BlobServiceClient 客户端 复制链接链接已复制到粘贴板!
组件可以检测在 registry 中存在 BlobServiceClient bean。如果这是该类型的唯一实例,它将用作客户端,您不必将其定义为 uri 参数,如上例所示。这对端点的智能配置非常有用。
13.6.5. Azure Storage Blob Producer 操作 复制链接链接已复制到粘贴板!
Camel Azure Storage Blob 组件在生成者端提供广泛的操作:
服务级别的操作
对于这些操作,需要 accountName
。
操作 | 描述 |
---|---|
| 获取 blob 的内容。您可以将此操作的输出限制为 blob 范围。 |
| 返回发生到 blob 和存储帐户中的 blob 元数据的事务日志。更改源提供有排序、保证、持久、不可变、只读日志的这些更改。 |
容器级别的操作
对于这些操作,需要 accountName
和 containerName
。
操作 | 描述 |
---|---|
| 在存储帐户中创建新容器。如果容器已存在具有相同名称的容器,则生成者将忽略它。 |
| 删除存储帐户中的指定容器。如果容器不存在,则操作会失败。 |
| 返回此容器中的 blob 列表,并扁平化文件夹结构。 |
blob 级别的操作
对于这些操作,需要 accountName
、containerName
和 blobName
。
操作 | blob Type | 描述 |
---|---|---|
| Common | 获取 blob 的内容。您可以将此操作的输出限制为 blob 范围。 |
| Common | 删除 blob。 |
| Common | 将整个 blob 下载到路径指定的文件中。如果文件已存在 {@link FileAlreadyExistsException},则该文件必须不存在。 |
| Common | 使用共享访问签名(SAS)为指定的 blob 生成下载链接。默认情况下,这限制为 1 小时允许访问。但是,您可以通过标头覆盖默认的过期持续时间。 |
| BlockBlob | 创建新的块 blob,或更新现有块 blob 的内容。更新现有块 blob 覆盖 blob 上的任何现有元数据。PutBlob 不支持部分更新;现有 blob 的内容会被新内容覆盖。 |
|
|
将指定的块上传到块 blob 的 "staging 区域",以便稍后通过调用 commitBlobBlockList 提交。但是,如果标头 |
|
|
通过指定要组成 blob 的块 ID 列表来写入 blob。为了写成 blob 的一部分,块必须已成功写入之前的 |
|
| 使用指定的块列表过滤器,返回已作为块 blob 一部分上传的块列表。 |
|
| 创建一个 0-length 追加 blob。调用 commitAppendBlo'b 操作,将数据附加到附加 Blob。 |
|
|
将新数据块提交到现有附加 Blob 的末尾。如果标头 |
|
|
创建指定长度的页面 Blob。调用 |
|
|
将一个或多个页面写入页面 blob。写入大小必须是 512 的倍数。如果标头 |
|
| 将页面 blob 大小调整为指定的大小(必须是 512 的倍数)。 |
|
| 从页面 blob 中释放指定的页面。范围的大小必须是 512 的倍数。 |
|
| 返回页面 blob 或页面 blob 的有效页面范围列表。 |
|
| 将 blob 从一个容器复制到另一个容器,甚至从不同的帐户复制。 |
请参阅此页面中的示例部分,了解如何在 camel 应用程序中使用这些操作。
13.6.6. 消费者示例 复制链接链接已复制到粘贴板!
要使用文件组件将 Blob 消耗到文件中,如下所示:
from("azure-storage-blob://camelazure/container1?blobName=hello.txt&accountName=yourAccountName&accessKey=yourAccessKey"). to("file://blobdirectory");
from("azure-storage-blob://camelazure/container1?blobName=hello.txt&accountName=yourAccountName&accessKey=yourAccessKey").
to("file://blobdirectory");
但是,您也可以使用 file 组件直接写入文件,您需要指定 fileDir
文件夹路径,才能将 blob 保存到机器中。
from("azure-storage-blob://camelazure/container1?blobName=hello.txt&accountName=yourAccountName&accessKey=yourAccessKey&fileDir=/var/to/awesome/dir"). to("mock:results");
from("azure-storage-blob://camelazure/container1?blobName=hello.txt&accountName=yourAccountName&accessKey=yourAccessKey&fileDir=/var/to/awesome/dir").
to("mock:results");
另外,组件支持批处理消费者,因此您可以使用仅指定容器名称的多个 Blob,消费者将根据容器中的 Blob 数量返回多个交换。
示例
from("azure-storage-blob://camelazure/container1?accountName=yourAccountName&accessKey=yourAccessKey&fileDir=/var/to/awesome/dir"). to("mock:results");
from("azure-storage-blob://camelazure/container1?accountName=yourAccountName&accessKey=yourAccessKey&fileDir=/var/to/awesome/dir").
to("mock:results");
13.6.7. 制作者操作示例 复制链接链接已复制到粘贴板!
-
listBlobContainers
-
createBlobContainer
-
deleteBlobContainer
:
-
listBlobs
:
-
getBlob
:
我们可以在交换正文中设置 outputStream
,并将数据写入它。例如:
如果没有设置正文,则此操作将为我们提供一个 InputStream
实例,该实例可以继续进一步的下游实例:
-
deleteBlob
:
-
downloadBlobToFile
:
-
downloadLink
-
uploadBlockBlob
-
stageBlockBlobList
-
commitBlockBlobList
-
getBlobBlockList
from("direct:start") .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=getBlobBlockList&serviceClient=#client") .log("${body}") .to("mock:result");
from("direct:start")
.to("azure-storage-blob://camelazure/container1?blobName=blob&operation=getBlobBlockList&serviceClient=#client")
.log("${body}")
.to("mock:result");
-
createAppendBlob
from("direct:start") .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=createAppendBlob&serviceClient=#client") .to("mock:result");
from("direct:start")
.to("azure-storage-blob://camelazure/container1?blobName=blob&operation=createAppendBlob&serviceClient=#client")
.to("mock:result");
-
commitAppendBlob
-
createPageBlob
from("direct:start") .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=createPageBlob&serviceClient=#client") .to("mock:result");
from("direct:start")
.to("azure-storage-blob://camelazure/container1?blobName=blob&operation=createPageBlob&serviceClient=#client")
.to("mock:result");
-
uploadPageBlob
-
resizePageBlob
-
clearPageBlob
-
getPageBlobRanges
-
copyBlob
这样,帐户"account"的容器 containerblob1 中的 file.txt 将复制到同一帐户的 containerblob2 中。
13.6.8. SAS Token 生成示例 复制链接链接已复制到粘贴板!
SAS Blob 容器令牌可以通过编程方式或通过 Azure UI 生成。要使用 java 代码生成令牌,可以执行以下操作:
然后,生成的 SAS 令牌可以存储在 application.properties
文件中,以便 camel 路由可以加载该文件,例如:
camel.component.azure-storage-blob.sas-token=MY_TOKEN_HERE from("direct:copyBlob") .to("azure-storage-blob://account/containerblob2?operation=uploadBlockBlob&credentialType=AZURE_SAS")
camel.component.azure-storage-blob.sas-token=MY_TOKEN_HERE
from("direct:copyBlob")
.to("azure-storage-blob://account/containerblob2?operation=uploadBlockBlob&credentialType=AZURE_SAS")