你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

AppendBlobAsyncClient 类

public final class AppendBlobAsyncClient
extends BlobAsyncClientBase

客户端到追加 Blob。 它只能通过 或 方法getAppendBlobAsyncClient()实例化buildAppendBlobAsyncClient()。 此类不保存有关特定 Blob 的任何状态,而是向服务上的资源发送适当请求的便捷方法。

此客户端包含对 Blob 的操作。 容器上的操作在 上 BlobContainerAsyncClient可用,服务上的操作在 上 BlobServiceAsyncClient可用。

有关详细信息,请参阅 Azure Docs

请注意,此客户端是一个异步客户端,它从 Spring Reactor Core 项目 (https://projectreactor.io/) 返回响应。 在此客户端中调用方法 不会 启动实际的网络操作,直到 .subscribe() 对反应响应调用 。 只需通过 Mono#toFuture()将其中一个响应转换为 CompletableFuture 对象。

字段摘要

修饰符和类型 字段和描述
static final int MAX_APPEND_BLOCK_BYTES

已放弃

指示在追加块的调用中可以发送的最大字节数。

static final int MAX_BLOCKS

已放弃

使用 getMaxBlocks()

指示追加 Blob 中允许的最大块数。

方法摘要

修饰符和类型 方法和描述
Mono<AppendBlobItem> appendBlock(Flux<ByteBuffer> data, long length)

将新的数据块提交到现有追加 Blob 的末尾。

Mono<AppendBlobItem> appendBlockFromUrl(String sourceUrl, BlobRange sourceRange)

将另一个 Blob 中的新数据块提交到此追加 Blob 的末尾。

Mono<Response<AppendBlobItem>> appendBlockFromUrlWithResponse(AppendBlobAppendBlockFromUrlOptions options)

将另一个 Blob 中的新数据块提交到此追加 Blob 的末尾。

Mono<Response<AppendBlobItem>> appendBlockFromUrlWithResponse(String sourceUrl, BlobRange sourceRange, byte[] sourceContentMD5, AppendBlobRequestConditions destRequestConditions, BlobRequestConditions sourceRequestConditions)

将另一个 Blob 中的新数据块提交到此追加 Blob 的末尾。

Mono<Response<AppendBlobItem>> appendBlockWithResponse(Flux<ByteBuffer> data, long length, byte[] contentMd5, AppendBlobRequestConditions appendBlobRequestConditions)

将新的数据块提交到现有追加 Blob 的末尾。

Mono<AppendBlobItem> create()

创建 0 长度追加 Blob。

Mono<AppendBlobItem> create(boolean overwrite)

创建 0 长度追加 Blob。

Mono<AppendBlobItem> createIfNotExists()

创建 0 长度追加 blob(如果不存在)。

Mono<Response<AppendBlobItem>> createIfNotExistsWithResponse(AppendBlobCreateOptions options)

创建 0 长度追加 blob(如果不存在)。

Mono<Response<AppendBlobItem>> createWithResponse(BlobHttpHeaders headers, Map<String,String> metadata, BlobRequestConditions requestConditions)

创建 0 长度追加 Blob。

Mono<Response<AppendBlobItem>> createWithResponse(AppendBlobCreateOptions options)

创建 0 长度追加 Blob。

AppendBlobAsyncClient getCustomerProvidedKeyAsyncClient(CustomerProvidedKey customerProvidedKey)

使用指定的 AppendBlobAsyncClient 创建一个新的 customerProvidedKey

AppendBlobAsyncClient getEncryptionScopeAsyncClient(String encryptionScope)

使用指定的 AppendBlobAsyncClient 创建一个新的 encryptionScope

int getMaxAppendBlockBytes()

根据正在使用的服务版本获取最大追加块字节数。

int getMaxBlocks()

获取追加 Blob 中允许的最大块数。

Mono<Void> seal()

密封追加 Blob,使其为只读。

Mono<Response<Void>> sealWithResponse(AppendBlobSealOptions options)

密封追加 Blob,使其为只读。

方法继承自 BlobAsyncClientBase

方法继承自 java.lang.Object

字段详细信息

MAX_APPEND_BLOCK_BYTES

@Deprecated
public static final int MAX_APPEND_BLOCK_BYTES

已放弃

指示在对 appendBlock 的调用中可以发送的最大字节数。

MAX_BLOCKS

@Deprecated
public static final int MAX_BLOCKS

已放弃

使用 getMaxBlocks()

指示追加 Blob 中允许的最大块数。

方法详细信息

appendBlock

public Mono appendBlock(Flux data, long length)

将新的数据块提交到现有追加 Blob 的末尾。

请注意,如果启用了重试 (默认) ,则传递的数据必须可重播。 换句话说, Flux 必须在每次订阅时生成相同的数据。 对于服务版本 2022-11-02 及更高版本,最大块大小为 100 MB。 对于早期版本,最大块大小为 4 MB。 有关详细信息,请参阅 Azure Docs

示例代码

client.appendBlock(data, length).subscribe(response ->
     System.out.printf("AppendBlob has %d committed blocks%n", response.getBlobCommittedBlockCount()));

参数:

data - 要写入 Blob 的数据。 请注意, Flux 如果启用了重试 (默认) ,则必须可重播。 换句话说,Flux 每次订阅时都必须生成相同的数据。
length - 数据的确切长度。 此值必须与 发出的数据的长度精确匹配,这一 Flux点很重要。

返回:

Mono 包含追加 Blob 操作的信息。

appendBlockFromUrl

public Mono appendBlockFromUrl(String sourceUrl, BlobRange sourceRange)

将另一个 Blob 中的新数据块提交到此追加 Blob 的末尾。

示例代码

client.appendBlockFromUrl(sourceUrl, new BlobRange(offset, count)).subscribe(response ->
     System.out.printf("AppendBlob has %d committed blocks%n", response.getBlobCommittedBlockCount()));

参数:

sourceUrl - 将成为副本源的 Blob 的 URL。 同一存储帐户中的源 Blob 可以通过共享密钥进行身份验证。 但是,如果源是另一个帐户中的 Blob,则源 blob 必须是公共的,或者必须通过共享访问签名进行身份验证。 如果源 Blob 是公共的,则无需身份验证即可执行该操作。
sourceRange - 要复制的源 BlobRange

返回:

Mono 包含追加 Blob 操作的信息。

appendBlockFromUrlWithResponse

public Mono<>> appendBlockFromUrlWithResponse(AppendBlobAppendBlockFromUrlOptions options)

将另一个 Blob 中的新数据块提交到此追加 Blob 的末尾。

示例代码

AppendBlobRequestConditions appendBlobRequestConditions = new AppendBlobRequestConditions()
     .setAppendPosition(POSITION)
     .setMaxSize(maxSize);

 BlobRequestConditions modifiedRequestConditions = new BlobRequestConditions()
     .setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));

 client.appendBlockFromUrlWithResponse(new AppendBlobAppendBlockFromUrlOptions(sourceUrl)
     .setSourceRange(new BlobRange(offset, count))
     .setDestinationRequestConditions(appendBlobRequestConditions)
     .setSourceRequestConditions(modifiedRequestConditions)).subscribe(response ->
     System.out.printf("AppendBlob has %d committed blocks%n", response.getValue().getBlobCommittedBlockCount()));

参数:

options - 操作的参数。

返回:

一个 Mono 包含 Response<T>value 包含追加 Blob 操作的 。

appendBlockFromUrlWithResponse

public Mono<>> appendBlockFromUrlWithResponse(String sourceUrl, BlobRange sourceRange, byte[] sourceContentMD5, AppendBlobRequestConditions destRequestConditions, BlobRequestConditions sourceRequestConditions)

将另一个 Blob 中的新数据块提交到此追加 Blob 的末尾。

示例代码

AppendBlobRequestConditions appendBlobRequestConditions = new AppendBlobRequestConditions()
     .setAppendPosition(POSITION)
     .setMaxSize(maxSize);

 BlobRequestConditions modifiedRequestConditions = new BlobRequestConditions()
     .setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));

 client.appendBlockFromUrlWithResponse(sourceUrl, new BlobRange(offset, count), null,
     appendBlobRequestConditions, modifiedRequestConditions).subscribe(response ->
     System.out.printf("AppendBlob has %d committed blocks%n", response.getValue().getBlobCommittedBlockCount()));

参数:

sourceUrl - 将成为副本源的 Blob 的 URL。 同一存储帐户中的源 Blob 可以通过共享密钥进行身份验证。 但是,如果源是另一个帐户中的 Blob,则源 blob 必须是公共的,或者必须通过共享访问签名进行身份验证。 如果源 Blob 是公共的,则无需身份验证即可执行该操作。
sourceRange - BlobRange
sourceContentMD5 - 源 Blob 中的块内容的 MD5 哈希。 如果指定,服务将计算收到的数据的 MD5,如果请求与提供的 MD5 不匹配,则请求将失败。
destRequestConditions - AppendBlobRequestConditions
sourceRequestConditions - BlobRequestConditions

返回:

一个 Mono 包含 Response<T>value 包含追加 Blob 操作的 。

appendBlockWithResponse

public Mono<>> appendBlockWithResponse(Flux data, long length, byte[] contentMd5, AppendBlobRequestConditions appendBlobRequestConditions)

将新的数据块提交到现有追加 Blob 的末尾。

请注意,如果启用了重试 (默认) ,则传递的数据必须可重播。 换句话说, Flux 必须在每次订阅时生成相同的数据。 对于服务版本 2022-11-02 及更高版本,最大块大小为 100 MB。 对于早期版本,最大块大小为 4 MB。 有关详细信息,请参阅 Azure Docs

示例代码

byte[] md5 = MessageDigest.getInstance("MD5").digest("data".getBytes(StandardCharsets.UTF_8));
 AppendBlobRequestConditions requestConditions = new AppendBlobRequestConditions()
     .setAppendPosition(POSITION)
     .setMaxSize(maxSize);

 client.appendBlockWithResponse(data, length, md5, requestConditions).subscribe(response ->
     System.out.printf("AppendBlob has %d committed blocks%n", response.getValue().getBlobCommittedBlockCount()));

参数:

data - 要写入 Blob 的数据。 请注意, Flux 如果启用了重试 (默认) ,则必须可重播。 换句话说,Flux 每次订阅时都必须生成相同的数据。
length - 数据的确切长度。 此值必须与 发出的数据的长度精确匹配,这一 Flux点很重要。
contentMd5 - 块内容的 MD5 哈希值。 此哈希值用于在传输期间验证块的完整性。 指定此标头时,存储服务会对已到达内容的哈希值与此标头值进行比较。 请注意,此 MD5 哈希值不与 Blob 一起存储。 如果两个哈希不匹配,则操作将失败。
appendBlobRequestConditions - AppendBlobRequestConditions

返回:

一个 Mono 包含 Response<T>value 包含追加 Blob 操作的 。

create

public Mono create()

创建 0 长度追加 Blob。 调用 appendBlock 将数据追加到追加 Blob。 默认情况下,此方法不会覆盖现有 Blob。

示例代码

client.create().subscribe(response ->
     System.out.printf("Created AppendBlob at %s%n", response.getLastModified()));

返回:

一个 Mono ,包含所创建的追加 Blob 的信息。

create

public Mono create(boolean overwrite)

创建 0 长度追加 Blob。 调用 appendBlock 将数据追加到追加 Blob。

示例代码

boolean overwrite = false; // Default behavior
 client.create(overwrite).subscribe(response ->
     System.out.printf("Created AppendBlob at %s%n", response.getLastModified()));

参数:

overwrite - 是否覆盖 Blob 上是否存在数据。

返回:

一个 Mono ,包含所创建的追加 Blob 的信息。

createIfNotExists

public Mono createIfNotExists()

创建 0 长度追加 blob(如果不存在)。 调用 appendBlock 将数据追加到追加 Blob。

示例代码

client.createIfNotExists().subscribe(response ->
     System.out.printf("Created AppendBlob at %s%n", response.getLastModified()));

返回:

指示完成的响应响应 MonoAppendBlobItem 包含已创建的追加 Blob 的信息。

createIfNotExistsWithResponse

public Mono<>> createIfNotExistsWithResponse(AppendBlobCreateOptions options)

创建 0 长度追加 blob(如果不存在)。 调用 appendBlock 将数据追加到追加 Blob。

示例代码

BlobHttpHeaders headers = new BlobHttpHeaders()
     .setContentType("binary")
     .setContentLanguage("en-US");
 Map<String, String> metadata = Collections.singletonMap("metadata", "value");
 Map<String, String> tags = Collections.singletonMap("tag", "value");

 client.createIfNotExistsWithResponse(new AppendBlobCreateOptions().setHeaders(headers)
     .setMetadata(metadata).setTags(tags)).subscribe(response -> {
         if (response.getStatusCode() == 409) {
             System.out.println("Already exists.");
         } else {
             System.out.println("successfully created.");
         }
     });

参数:

返回:

一个 Mono 包含 Response<T> 信号完成的 ,它 value 包含 AppendBlobItem 有关追加 blob 的信息。 如果 Response<T>的状态代码为 201,则表示已成功创建新的页 Blob。 如果状态代码为 409,则此位置已存在追加 Blob。

createWithResponse

public Mono<>> createWithResponse(BlobHttpHeaders headers, Map metadata, BlobRequestConditions requestConditions)

创建 0 长度追加 Blob。 调用 appendBlock 将数据追加到追加 Blob。

若要避免覆盖,请将“*”传递给 setIfNoneMatch(String ifNoneMatch)

示例代码

BlobHttpHeaders headers = new BlobHttpHeaders()
     .setContentType("binary")
     .setContentLanguage("en-US");
 Map<String, String> metadata = Collections.singletonMap("metadata", "value");
 BlobRequestConditions requestConditions = new BlobRequestConditions().setLeaseId(leaseId)
     .setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));

 client.createWithResponse(headers, metadata, requestConditions).subscribe(response ->
     System.out.printf("Created AppendBlob at %s%n", response.getValue().getLastModified()));

参数:

headers - BlobHttpHeaders
metadata - 要与 Blob 关联的元数据。 如果任何元数据键或值中有前导空格或尾随空格,则必须将其删除或编码。
requestConditions - BlobRequestConditions

返回:

一个 Mono 包含 Response<T>value 包含已创建的追加 blob 的 。

createWithResponse

public Mono<>> createWithResponse(AppendBlobCreateOptions options)

创建 0 长度追加 Blob。 调用 appendBlock 将数据追加到追加 Blob。

若要避免覆盖,请将“*”传递给 setIfNoneMatch(String ifNoneMatch)

示例代码

BlobHttpHeaders headers = new BlobHttpHeaders()
     .setContentType("binary")
     .setContentLanguage("en-US");
 Map<String, String> metadata = Collections.singletonMap("metadata", "value");
 Map<String, String> tags = Collections.singletonMap("tag", "value");
 BlobRequestConditions requestConditions = new BlobRequestConditions().setLeaseId(leaseId)
     .setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));

 client.createWithResponse(new AppendBlobCreateOptions().setHeaders(headers).setMetadata(metadata)
     .setTags(tags).setRequestConditions(requestConditions)).subscribe(response ->
     System.out.printf("Created AppendBlob at %s%n", response.getValue().getLastModified()));

参数:

返回:

一个 Mono 包含 Response<T>value 包含已创建的追加 blob 的 。

getCustomerProvidedKeyAsyncClient

public AppendBlobAsyncClient getCustomerProvidedKeyAsyncClient(CustomerProvidedKey customerProvidedKey)

使用指定的 AppendBlobAsyncClient 创建一个新的 customerProvidedKey

替代:

AppendBlobAsyncClient.getCustomerProvidedKeyAsyncClient(CustomerProvidedKey customerProvidedKey)

参数:

customerProvidedKey - blob CustomerProvidedKey 的 ,传递 null 以使用没有客户提供的密钥。

返回:

具有 AppendBlobAsyncClient 指定 customerProvidedKey的 。

getEncryptionScopeAsyncClient

public AppendBlobAsyncClient getEncryptionScopeAsyncClient(String encryptionScope)

使用指定的 AppendBlobAsyncClient 创建一个新的 encryptionScope

替代:

AppendBlobAsyncClient.getEncryptionScopeAsyncClient(String encryptionScope)

参数:

encryptionScope - blob 的加密范围,传递 null 以不使用加密范围。

返回:

具有 AppendBlobAsyncClient 指定 encryptionScope的 。

getMaxAppendBlockBytes

public int getMaxAppendBlockBytes()

根据正在使用的服务版本获取最大追加块字节数。 服务版本 2022-11-02 及更高版本支持上传高达 100MB 的块字节,所有较旧的服务版本都支持高达 4MB 的块字节。

返回:

可以根据服务版本上传的最大块字节数。

getMaxBlocks

public int getMaxBlocks()

获取追加 Blob 中允许的最大块数。

返回:

可在追加 Blob 中上传的最大块数。

seal

public Mono seal()

密封追加 Blob,使其为只读。 任何后续追加都将失败。

示例代码

client.seal().subscribe(response -> System.out.println("Sealed AppendBlob"));

返回:

指示完成的响应响应。

sealWithResponse

public Mono<>> sealWithResponse(AppendBlobSealOptions options)

密封追加 Blob,使其为只读。 任何后续追加都将失败。

示例代码

AppendBlobRequestConditions requestConditions = new AppendBlobRequestConditions().setLeaseId(leaseId)
     .setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));

 client.sealWithResponse(new AppendBlobSealOptions().setRequestConditions(requestConditions))
     .subscribe(response -> System.out.println("Sealed AppendBlob"));

参数:

返回:

指示完成的响应响应。

适用于