你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
AppendBlobClient 类
- java.
lang. Object - com.
azure. storage. blob. specialized. BlobClientBase - com.
azure. storage. blob. specialized. AppendBlobClient
- com.
- com.
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 中允许的最大块数。 |
方法摘要
方法继承自 BlobClientBase
方法继承自 java.lang.Object
字段详细信息
MAX_APPEND_BLOCK_BYTES
MAX_BLOCKS
方法详细信息
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());
参数:
Flux
数据的长度精确匹配。
返回:
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());
参数:
返回:
appendBlockFromUrlWithResponse
public Response
将另一个 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());
参数:
返回:
appendBlockFromUrlWithResponse
public Response
将另一个 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());
参数:
返回:
appendBlockWithResponse
public Response
将新的数据块提交到现有追加 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());
参数:
Flux
数据的长度精确匹配。
返回:
create
public AppendBlobItem create()
创建一个 0 长度的追加 Blob。 调用 appendBlock 将数据追加到追加 blob。 默认情况下,此方法不会覆盖现有 Blob。
示例代码
System.out.printf("Created AppendBlob at %s%n", client.create().getLastModified());
返回:
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());
参数:
返回:
createIfNotExists
public AppendBlobItem createIfNotExists()
如果不存在,则创建一个 0 长度的追加 Blob。 调用 appendBlock 将数据追加到追加 blob。
示例代码
client.createIfNotExists();
System.out.println("Created AppendBlob");
返回:
createIfNotExistsWithResponse
public Response
如果不存在,则创建一个 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());
}
参数:
返回:
createWithResponse
public Response
创建一个 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());
参数:
返回:
createWithResponse
public Response
创建一个 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());
参数:
返回:
getBlobOutputStream
public BlobOutputStream getBlobOutputStream()
创建并打开输出流,将数据写入追加 Blob。 如果服务上已存在 Blob,新数据将追加到现有 Blob。
返回:
getBlobOutputStream
public BlobOutputStream getBlobOutputStream(boolean overwrite)
创建并打开输出流,将数据写入追加 Blob。 如果指定 true
了覆盖 ,则会删除并重新创建现有 Blob(如果 Blob 上存在数据)。 如果指定 false
了覆盖 ,则会将新数据追加到现有 Blob。
参数:
返回:
getBlobOutputStream
public BlobOutputStream getBlobOutputStream(AppendBlobRequestConditions requestConditions)
创建并打开输出流,将数据写入追加 Blob。
参数:
返回:
getCustomerProvidedKeyClient
public AppendBlobClient getCustomerProvidedKeyClient(CustomerProvidedKey customerProvidedKey)
使用指定的 AppendBlobClient 创建一个新的 customerProvidedKey
。
替代:
AppendBlobClient.getCustomerProvidedKeyClient(CustomerProvidedKey customerProvidedKey)参数:
返回:
customerProvidedKey
的 。getEncryptionScopeClient
public AppendBlobClient getEncryptionScopeClient(String encryptionScope)
使用指定的 AppendBlobClient 创建一个新的 encryptionScope
。
替代:
AppendBlobClient.getEncryptionScopeClient(String encryptionScope)参数:
null
为不使用加密范围。
返回:
encryptionScope
的 。getMaxAppendBlockBytes
public int getMaxAppendBlockBytes()
根据所使用的服务版本获取最大追加块字节数。 服务版本 2022-11-02 及更高版本支持上传最大 100MB 的块字节,所有较旧的服务版本都支持高达 4MB。
返回:
getMaxBlocks
public int getMaxBlocks()
获取追加 Blob 中允许的最大块数。
返回:
seal
public void seal()
密封追加 Blob,使其为只读。 任何后续追加都将失败。
示例代码
client.seal();
System.out.println("Sealed AppendBlob");
sealWithResponse
public Response
密封追加 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");
参数:
返回: