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

AppendBlobClient 类

public final class AppendBlobClient
extends BlobClientBase

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

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

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

字段摘要

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

已放弃

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

static final int MAX_BLOCKS

已放弃

使用 getMaxBlocks()

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

方法摘要

修饰符和类型 方法和描述
AppendBlobItem appendBlock(InputStream data, long length)

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

AppendBlobItem appendBlockFromUrl(String sourceUrl, BlobRange sourceRange)

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

Response<AppendBlobItem> appendBlockFromUrlWithResponse(AppendBlobAppendBlockFromUrlOptions options, Duration timeout, Context context)

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

Response<AppendBlobItem> appendBlockFromUrlWithResponse(String sourceUrl, BlobRange sourceRange, byte[] sourceContentMd5, AppendBlobRequestConditions destRequestConditions, BlobRequestConditions sourceRequestConditions, Duration timeout, Context context)

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

Response<AppendBlobItem> appendBlockWithResponse(InputStream data, long length, byte[] contentMd5, AppendBlobRequestConditions appendBlobRequestConditions, Duration timeout, Context context)

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

AppendBlobItem create()

创建一个 0 长度的追加 Blob。

AppendBlobItem create(boolean overwrite)

创建一个 0 长度的追加 Blob。

AppendBlobItem createIfNotExists()

如果不存在,则创建一个 0 长度的追加 Blob。

Response<AppendBlobItem> createIfNotExistsWithResponse(AppendBlobCreateOptions options, Duration timeout, Context context)

如果不存在,则创建一个 0 长度的追加 Blob。

Response<AppendBlobItem> createWithResponse(BlobHttpHeaders headers, Map<String,String> metadata, BlobRequestConditions requestConditions, Duration timeout, Context context)

创建一个 0 长度的追加 Blob。

Response<AppendBlobItem> createWithResponse(AppendBlobCreateOptions options, Duration timeout, Context context)

创建一个 0 长度的追加 Blob。

BlobOutputStream getBlobOutputStream()

创建并打开输出流,将数据写入追加 Blob。

BlobOutputStream getBlobOutputStream(boolean overwrite)

创建并打开输出流,将数据写入追加 Blob。

BlobOutputStream getBlobOutputStream(AppendBlobRequestConditions requestConditions)

创建并打开输出流,将数据写入追加 Blob。

AppendBlobClient getCustomerProvidedKeyClient(CustomerProvidedKey customerProvidedKey)

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

AppendBlobClient getEncryptionScopeClient(String encryptionScope)

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

int getMaxAppendBlockBytes()

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

int getMaxBlocks()

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

void seal()

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

Response<Void> sealWithResponse(AppendBlobSealOptions options, Duration timeout, Context context)

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

方法继承自 BlobClientBase

abortCopyFromUrl abortCopyFromUrlWithResponse beginCopy beginCopy beginCopy copyFromUrl copyFromUrlWithResponse copyFromUrlWithResponse createSnapshot createSnapshotWithResponse delete deleteIfExists deleteIfExistsWithResponse deleteImmutabilityPolicy deleteImmutabilityPolicyWithResponse deleteWithResponse download downloadContent downloadContentWithResponse downloadContentWithResponse downloadStream downloadStreamWithResponse downloadToFile downloadToFile downloadToFileWithResponse downloadToFileWithResponse downloadToFileWithResponse downloadWithResponse exists existsWithResponse generateSas generateSas generateSas generateUserDelegationSas generateUserDelegationSas generateUserDelegationSas getAccountInfo getAccountInfoWithResponse getAccountName getAccountUrl getBlobName getBlobUrl getContainerClient getContainerName getCustomerProvidedKey getCustomerProvidedKeyClient getEncryptionScope getEncryptionScopeClient getHttpPipeline getProperties getPropertiesWithResponse getServiceVersion getSnapshotClient getSnapshotId getTags getTagsWithResponse getVersionClient getVersionId isSnapshot openInputStream openInputStream openInputStream openInputStream openQueryInputStream openQueryInputStreamWithResponse openSeekableByteChannelRead query queryWithResponse setAccessTier setAccessTierWithResponse setAccessTierWithResponse setHttpHeaders setHttpHeadersWithResponse setImmutabilityPolicy setImmutabilityPolicyWithResponse setLegalHold setLegalHoldWithResponse setMetadata setMetadataWithResponse setTags setTagsWithResponse undelete undeleteWithResponse

方法继承自 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 AppendBlobItem appendBlock(InputStream data, long length)

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

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

示例代码

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

参数:

data - 要写入 Blob 的数据。 数据必须是可标记的。 这是为了支持重试。 如果数据不可标记,请考虑使用 getBlobOutputStream() 并写入返回的 OutputStream。 或者,请考虑将数据源包装在 BufferedInputStream 中以添加标记支持。
length - 数据的确切长度。 此值必须与 发出的 Flux数据的长度精确匹配。

返回:

追加 blob 操作的信息。

appendBlockFromUrl

public AppendBlobItem appendBlockFromUrl(String sourceUrl, BlobRange sourceRange)

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

示例代码

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

参数:

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

返回:

追加 blob 操作的信息。

appendBlockFromUrlWithResponse

public Response appendBlockFromUrlWithResponse(AppendBlobAppendBlockFromUrlOptions options, Duration timeout, Context context)

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

示例代码

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

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

 Context context = new Context("key", "value");

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

参数:

options - 操作的选项
timeout - 一个可选的超时值,超过该值 RuntimeException 将引发 。
context - 在服务调用期间通过 Http 管道传递的其他上下文。

返回:

追加 blob 操作的信息。

appendBlockFromUrlWithResponse

public Response appendBlockFromUrlWithResponse(String sourceUrl, BlobRange sourceRange, byte[] sourceContentMd5, AppendBlobRequestConditions destRequestConditions, BlobRequestConditions sourceRequestConditions, Duration timeout, Context context)

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

示例代码

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

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

 Context context = new Context("key", "value");

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

参数:

sourceUrl - 将成为副本源的 Blob 的 URL。 可以通过共享密钥对同一存储帐户中的源 Blob 进行身份验证。 但是,如果源是另一个帐户中的 Blob,则源 blob 必须是公共的,或者必须通过共享访问签名进行身份验证。 如果源 Blob 是公共的,则无需进行身份验证即可执行该操作。
sourceRange - BlobRange
sourceContentMd5 - 源 Blob 中的块内容的 MD5 哈希。 如果指定,服务将计算收到的数据的 MD5,如果请求与提供的 MD5 不匹配,则请求将失败。
destRequestConditions - AppendBlobRequestConditions
sourceRequestConditions - BlobRequestConditions
timeout - 一个可选的超时值,超过该值 RuntimeException 将引发 。
context - 在服务调用期间通过 Http 管道传递的其他上下文。

返回:

追加 blob 操作的信息。

appendBlockWithResponse

public Response appendBlockWithResponse(InputStream data, long length, byte[] contentMd5, AppendBlobRequestConditions appendBlobRequestConditions, Duration timeout, Context context)

将新的数据块提交到现有追加 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);
 Context context = new Context("key", "value");

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

参数:

data - 要写入 Blob 的数据。 数据必须是可标记的。 这是为了支持重试。 如果数据不可标记,请考虑使用 getBlobOutputStream() 并写入返回的 OutputStream。 或者,请考虑将数据源包装在 BufferedInputStream 中以添加标记支持。
length - 数据的确切长度。 此值必须与 发出的 Flux数据的长度精确匹配。
contentMd5 - 块内容的 MD5 哈希值。 此哈希值用于在传输期间验证块的完整性。 指定此标头时,存储服务会对已到达内容的哈希值与此标头值进行比较。 请注意,此 MD5 哈希值不与 Blob 一起存储。 如果两个哈希不匹配,则操作将失败。
appendBlobRequestConditions - AppendBlobRequestConditions
timeout - 一个可选的超时值,超过该值 RuntimeException 将引发 。
context - 在服务调用期间通过 Http 管道传递的其他上下文。

返回:

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

create

public AppendBlobItem create()

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

示例代码

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

返回:

已创建的追加 Blob 的信息。

create

public AppendBlobItem create(boolean overwrite)

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

示例代码

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

参数:

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

返回:

已创建的追加 Blob 的信息。

createIfNotExists

public AppendBlobItem createIfNotExists()

如果不存在,则创建一个 0 长度的追加 Blob。 调用 appendBlock 将数据追加到追加 blob。

示例代码

client.createIfNotExists();
 System.out.println("Created AppendBlob");

返回:

AppendBlobItem 包含已创建的追加 Blob 的信息。

createIfNotExistsWithResponse

public Response createIfNotExistsWithResponse(AppendBlobCreateOptions options, Duration timeout, Context context)

如果不存在,则创建一个 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("tags", "value");
 Context context = new Context("key", "value");

 Response<AppendBlobItem> response = client.createIfNotExistsWithResponse(new AppendBlobCreateOptions()
     .setHeaders(headers).setMetadata(metadata).setTags(tags), timeout, context);
 if (response.getStatusCode() == 409) {
     System.out.println("Already existed.");
 } else {
     System.out.printf("Create completed with status %d%n", response.getStatusCode());
 }

参数:

timeout - 一个可选的超时值,超过该值 RuntimeException 将引发 。
context - 在服务调用期间通过 Http 管道传递的其他上下文。

返回:

指示完成的响应响应Response<T>,其中包含valueAppendBlobItem有关追加 blob 的包含信息。 如果 Response<T>的状态代码为 201,则表示已成功创建新的追加 blob。 如果状态代码为 409,则此位置已存在追加 Blob。

createWithResponse

public Response createWithResponse(BlobHttpHeaders headers, Map metadata, BlobRequestConditions requestConditions, Duration timeout, Context context)

创建一个 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));
 Context context = new Context("key", "value");

 System.out.printf("Created AppendBlob at %s%n",
     client.createWithResponse(headers, metadata, requestConditions, timeout, context).getValue()
         .getLastModified());

参数:

headers - BlobHttpHeaders
metadata - 要与 Blob 关联的元数据。 如果任何元数据键或值中都有前导或尾随空格,则必须将其删除或编码。
requestConditions - BlobRequestConditions
timeout - 一个可选的超时值,超过该值 RuntimeException 将引发 。
context - 在服务调用期间通过 Http 管道传递的其他上下文。

返回:

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

createWithResponse

public Response createWithResponse(AppendBlobCreateOptions options, Duration timeout, Context context)

创建一个 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("tags", "value");
 BlobRequestConditions requestConditions = new BlobRequestConditions()
     .setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));
 Context context = new Context("key", "value");

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

参数:

timeout - 一个可选的超时值,超过该值 RuntimeException 将引发 。
context - 在服务调用期间通过 Http 管道传递的其他上下文。

返回:

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

getBlobOutputStream

public BlobOutputStream getBlobOutputStream()

创建并打开输出流,将数据写入追加 Blob。 如果服务上已存在 Blob,新数据将追加到现有 Blob。

返回:

BlobOutputStream用于将数据写入 Blob 的 对象。

getBlobOutputStream

public BlobOutputStream getBlobOutputStream(boolean overwrite)

创建并打开输出流,将数据写入追加 Blob。 如果指定 true了覆盖 ,则会删除并重新创建现有 Blob(如果 Blob 上存在数据)。 如果指定 false了覆盖 ,则会将新数据追加到现有 Blob。

参数:

overwrite - 是否应删除和重新创建现有 Blob,如果 Blob 上存在数据。

返回:

BlobOutputStream用于将数据写入 Blob 的 对象。

getBlobOutputStream

public BlobOutputStream getBlobOutputStream(AppendBlobRequestConditions requestConditions)

创建并打开输出流,将数据写入追加 Blob。

参数:

requestConditions - 一个 BlobRequestConditions 对象,表示 Blob 的访问条件。

返回:

BlobOutputStream用于将数据写入 Blob 的 对象。

getCustomerProvidedKeyClient

public AppendBlobClient getCustomerProvidedKeyClient(CustomerProvidedKey customerProvidedKey)

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

替代:

AppendBlobClient.getCustomerProvidedKeyClient(CustomerProvidedKey customerProvidedKey)

参数:

customerProvidedKey - CustomerProvidedKey对于 Blob,传递null以使用任何客户提供的密钥。

返回:

具有 AppendBlobClient 指定 customerProvidedKey的 。

getEncryptionScopeClient

public AppendBlobClient getEncryptionScopeClient(String encryptionScope)

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

替代:

AppendBlobClient.getEncryptionScopeClient(String encryptionScope)

参数:

encryptionScope - Blob 的加密范围,传递 null 为不使用加密范围。

返回:

具有 AppendBlobClient 指定 encryptionScope的 。

getMaxAppendBlockBytes

public int getMaxAppendBlockBytes()

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

返回:

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

getMaxBlocks

public int getMaxBlocks()

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

返回:

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

seal

public void seal()

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

示例代码

client.seal();
 System.out.println("Sealed AppendBlob");

sealWithResponse

public Response sealWithResponse(AppendBlobSealOptions options, Duration timeout, Context context)

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

示例代码

AppendBlobRequestConditions requestConditions = new AppendBlobRequestConditions().setLeaseId(leaseId)
     .setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));
 Context context = new Context("key", "value");

 client.sealWithResponse(new AppendBlobSealOptions().setRequestConditions(requestConditions), timeout, context);
 System.out.println("Sealed AppendBlob");

参数:

timeout - 一个可选的超时值,超过该值 RuntimeException 将引发 。
context - 在服务调用期间通过 Http 管道传递的其他上下文。

返回:

指示完成的响应响应。

适用于