15.6. 使用方法
例如,若要从 camelazure 存储帐户中的 container1 上的块 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");
15.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 | 指定要执行的制作者操作,请参阅此页面上的与生成者操作相关的 doc。 |
|
|
|
|
| 过滤结果,以仅返回名称与指定正则表达式匹配的 Blob。可以为空以返回全部.如果设置了 prefix 和 regex,则 regex 会忽略优先级和前缀。 |
|
|
|
|
| 它过滤结果以在开始时间后大约返回事件。注意:也可以返回属于上一小时的几个事件。可以缺少属于此小时的几个事件;若要确保每小时的所有事件都被返回,可按小时舍入开始时间。 |
|
|
|
|
| 它过滤结果,以在结束时间之前返回事件。注意:也可以返回属于下一小时的几个事件。可以缺少属于此小时的几个事件;若要确保每小时的所有事件都被返回,可按小时舍入结束时间。 |
|
|
|
|
| 这提供了在服务调用期间通过 Http 管道传递的额外上下文。 |
|
|
|
|
| 在复制 blob 操作中用作源帐户名称的源 blob 帐户名称 |
|
|
|
|
| 在复制 blob 操作中用作源容器名称的源 blob 容器名称 |
15.6.2. 由组件制作者或消费者设置的消息标头 复制链接链接已复制到粘贴板!
| 标头 | 变量名称 | 类型 | 描述 |
|---|---|---|---|
|
|
|
| blob 的访问层。 |
|
|
|
| blob 的访问层最后一次更改时的日期。 |
|
|
|
| blob 的存档状态。 |
|
|
|
| 创建 blob 时间。 |
|
|
|
| 页 blob 的当前序列号。 |
|
|
|
| blob 的大小。 |
|
|
|
| blob 的类型。 |
|
|
|
| 为 blob 指定的缓存控制。 |
|
|
|
| 提交给附加 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。 |
15.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");
15.6.4. 在 registry 中自动检测 BlobServiceClient 客户端 复制链接链接已复制到粘贴板!
组件能够检测 BlobServiceClient bean 是否存在。如果这是该类型的唯一实例,它将用作客户端,您不必将其定义为 uri 参数,如上例。这对对端点的智能配置非常有用。
15.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},则会抛出该文件,且必须存在 {@link FileAlreadyExistsException}。 |
|
| Common | 使用共享访问签名(SAS)为指定的 blob 生成下载链接。默认情况下,这只限制为 1 小时允许访问 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 的倍数)。 |
|
|
| 从 page blob 中释放指定的页面。范围的大小必须是 512 的倍数。 |
|
|
| 返回页面 blob 或页面 blob 或快照的有效页面范围列表。 |
|
|
| 将 blob 从一个容器复制到另一个容器,即使来自不同帐户。 |
请参阅此页面中的示例部分,了解如何在您的 camel 中使用这些操作。
15.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");
15.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 中。
15.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")