你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
BlockBlobClient 类
- java.
lang. Object - com.
azure. storage. blob. specialized. BlobClientBase - com.
azure. storage. blob. specialized. BlockBlobClient
- com.
- com.
public final class BlockBlobClient
extends BlobClientBase
客户端到块 Blob。 它只能通过 或 方法getBlockBlobClient()实例化SpecializedBlobClientBuilder。 此类不保留有关特定 Blob 的任何状态,而是向服务上的资源发送适当请求的一种便捷方式。
有关详细信息,请参阅 Azure Docs 。
修饰符和类型 | 字段和描述 |
---|---|
static final int |
MAX_BLOCKS
指示块 Blob 中允许的最大块数。 |
static final int |
MAX_STAGE_BLOCK_BYTES
已放弃 指示在调用阶段 |
static final long |
MAX_STAGE_BLOCK_BYTES_LONG
指示在调用阶段 |
static final int |
MAX_UPLOAD_BLOB_BYTES
已放弃 指示在上传调用中可以发送的最大字节数。 |
static final long |
MAX_UPLOAD_BLOB_BYTES_LONG
指示在上传调用中可以发送的最大字节数。 |
方法继承自 BlobClientBase
方法继承自 java.lang.Object
MAX_BLOCKS
public static final int MAX_BLOCKS
指示块 Blob 中允许的最大块数。
MAX_STAGE_BLOCK_BYTES
MAX_STAGE_BLOCK_BYTES_LONG
public static final long MAX_STAGE_BLOCK_BYTES_LONG
指示在调用 stageBlock 时可以发送的最大字节数。
MAX_UPLOAD_BLOB_BYTES
MAX_UPLOAD_BLOB_BYTES_LONG
public static final long MAX_UPLOAD_BLOB_BYTES_LONG
指示在上传调用中可以发送的最大字节数。
commitBlockList
public BlockBlobItem commitBlockList(List
通过指定要构成 Blob 的块 ID 列表来写入 Blob。 为了作为 Blob 的一部分进行写入,块必须在之前的 stageBlock 操作中成功写入服务器。 可以调用 commitBlockList 来更新 Blob,方法是仅上传已更改的块,然后将新的块和现有块一起提交。 未在阻止列表中指定并永久删除的任何块。 有关详细信息,请参阅 Azure Docs。
示例代码
System.out.printf("Committing block list completed. Last modified: %s%n",
client.commitBlockList(Collections.singletonList(base64BlockId)).getLastModified());
参数:
String
的列表,指定要提交的块 ID。
返回:
commitBlockList
public BlockBlobItem commitBlockList(List
通过指定要构成 Blob 的块 ID 列表来写入 Blob。 为了作为 Blob 的一部分进行写入,块必须在之前的 stageBlock 操作中成功写入服务器。 可以调用 commitBlockList 来更新 Blob,方法是仅上传已更改的块,然后将新的块和现有块一起提交。 未在阻止列表中指定并永久删除的任何块。 有关详细信息,请参阅 Azure Docs。
示例代码
boolean overwrite = false; // Default behavior
System.out.printf("Committing block list completed. Last modified: %s%n",
client.commitBlockList(Collections.singletonList(base64BlockId), overwrite).getLastModified());
参数:
String
的列表,指定要提交的块 ID。
返回:
commitBlockListWithResponse
public Response
通过指定要构成 Blob 的块 ID 列表来写入 Blob。 为了作为 Blob 的一部分进行写入,块必须在之前的 stageBlock 操作中成功写入服务器。 可以调用 commitBlockList 来更新 Blob,方法是仅上传已更改的块,然后将新的块和现有块一起提交。 未在阻止列表中指定并永久删除的任何块。 有关详细信息,请参阅 Azure Docs。
若要避免覆盖,请将“*”传递给 setIfNoneMatch(String ifNoneMatch)。
示例代码
BlobHttpHeaders headers = new BlobHttpHeaders()
.setContentMd5("data".getBytes(StandardCharsets.UTF_8))
.setContentLanguage("en-US")
.setContentType("binary");
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));
Context context = new Context("key", "value");
System.out.printf("Committing block list completed with status %d%n",
client.commitBlockListWithResponse(
new BlockBlobCommitBlockListOptions(Collections.singletonList(base64BlockId)).setHeaders(headers)
.setMetadata(metadata).setTags(tags).setTier(AccessTier.HOT)
.setRequestConditions(requestConditions), timeout, context)
.getStatusCode());
参数:
返回:
commitBlockListWithResponse
public Response
通过指定要构成 Blob 的块 ID 列表来写入 Blob。 为了作为 Blob 的一部分进行写入,块必须在之前的 stageBlock 操作中成功写入服务器。 可以调用 commitBlockList 来更新 Blob,方法是仅上传已更改的块,然后将新的块和现有块一起提交。 未在阻止列表中指定并永久删除的任何块。 有关详细信息,请参阅 Azure Docs。
若要避免覆盖,请将“*”传递给 setIfNoneMatch(String ifNoneMatch)。
示例代码
BlobHttpHeaders headers = new BlobHttpHeaders()
.setContentMd5(MessageDigest.getInstance("MD5").digest("data".getBytes(StandardCharsets.UTF_8)))
.setContentLanguage("en-US")
.setContentType("binary");
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("Committing block list completed with status %d%n",
client.commitBlockListWithResponse(Collections.singletonList(base64BlockId), headers, metadata,
AccessTier.HOT, requestConditions, timeout, context).getStatusCode());
参数:
String
的列表,指定要提交的块 ID。
返回:
getBlobOutputStream
public BlobOutputStream getBlobOutputStream()
创建并打开输出流,将数据写入块 Blob。
注意:建议使用大小合理的缓冲区调用写入,为此,可以使用 BufferedOutputStream 包装下面获取的 BlobOutputStream。
返回:
getBlobOutputStream
public BlobOutputStream getBlobOutputStream(boolean overwrite)
创建并打开输出流,将数据写入块 Blob。
注意:建议使用大小合理的缓冲区调用写入,为此,可以使用 BufferedOutputStream 包装下面获取的 BlobOutputStream。
参数:
返回:
getBlobOutputStream
public BlobOutputStream getBlobOutputStream(BlobRequestConditions requestConditions)
创建并打开输出流,将数据写入块 Blob。 如果服务中已存在 Blob,则会覆盖该 Blob。
若要避免覆盖,请将“*”传递给 setIfNoneMatch(String ifNoneMatch)。
注意:建议使用大小合理的缓冲区调用写入,为此,可以使用 BufferedOutputStream 包装下面获取的 BlobOutputStream。
参数:
返回:
getBlobOutputStream
public BlobOutputStream getBlobOutputStream(ParallelTransferOptions parallelTransferOptions, BlobHttpHeaders headers, Map
创建并打开输出流,将数据写入块 Blob。 如果服务中已存在 Blob,则会覆盖该 Blob。
若要避免覆盖,请将“*”传递给 setIfNoneMatch(String ifNoneMatch)。
注意:建议使用大小合理的缓冲区调用写入,为此,可以使用 BufferedOutputStream 包装下面获取的 BlobOutputStream。
参数:
返回:
getBlobOutputStream
public BlobOutputStream getBlobOutputStream(BlockBlobOutputStreamOptions options)
创建并打开输出流,将数据写入块 Blob。 如果服务中已存在 Blob,则会覆盖该 Blob。
若要避免覆盖,请将“*”传递给 setIfNoneMatch(String ifNoneMatch)。
注意:建议使用大小合理的缓冲区调用写入,为此,可以使用 BufferedOutputStream 包装下面获取的 BlobOutputStream。
参数:
返回:
getBlobOutputStream
public BlobOutputStream getBlobOutputStream(BlockBlobOutputStreamOptions options, Context context)
创建并打开输出流,将数据写入块 Blob。 如果服务中已存在 Blob,则会覆盖该 Blob。
若要避免覆盖,请将“*”传递给 setIfNoneMatch(String ifNoneMatch)。
注意:建议使用大小合理的缓冲区调用写入,为此,可以使用 BufferedOutputStream 包装下面获取的 BlobOutputStream。
参数:
返回:
getCustomerProvidedKeyClient
public BlockBlobClient getCustomerProvidedKeyClient(CustomerProvidedKey customerProvidedKey)
使用指定的 BlockBlobClient 创建一个新的 customerProvidedKey
。
替代:
BlockBlobClient.getCustomerProvidedKeyClient(CustomerProvidedKey customerProvidedKey)参数:
返回:
customerProvidedKey
的 。getEncryptionScopeClient
public BlockBlobClient getEncryptionScopeClient(String encryptionScope)
使用指定的 BlockBlobClient 创建一个新的 encryptionScope
。
替代:
BlockBlobClient.getEncryptionScopeClient(String encryptionScope)参数:
null
为不使用加密范围。
返回:
encryptionScope
的 。listBlocks
public BlockList listBlocks(BlockListType listType)
使用指定的块列表筛选器返回已作为块 Blob 的一部分上传的块的列表。 有关详细信息,请参阅 Azure Docs。
示例代码
BlockList block = client.listBlocks(BlockListType.ALL);
System.out.println("Committed Blocks:");
block.getCommittedBlocks().forEach(b -> System.out.printf("Name: %s, Size: %d", b.getName(), b.getSizeLong()));
System.out.println("Uncommitted Blocks:");
block.getUncommittedBlocks().forEach(b -> System.out.printf("Name: %s, Size: %d", b.getName(), b.getSizeLong()));
参数:
返回:
listBlocksWithResponse
public Response
使用指定的块列表筛选器返回已作为块 Blob 的一部分上传的块的列表。 有关详细信息,请参阅 Azure Docs。
示例代码
Context context = new Context("key", "value");
BlockList block = client.listBlocksWithResponse(BlockListType.ALL, leaseId, timeout, context).getValue();
System.out.println("Committed Blocks:");
block.getCommittedBlocks().forEach(b -> System.out.printf("Name: %s, Size: %d", b.getName(), b.getSizeLong()));
System.out.println("Uncommitted Blocks:");
block.getUncommittedBlocks().forEach(b -> System.out.printf("Name: %s, Size: %d", b.getName(), b.getSizeLong()));
参数:
返回:
listBlocksWithResponse
public Response
使用指定的阻止列表筛选器返回已作为块 Blob 的一部分上传的块列表。 有关详细信息,请参阅 Azure Docs。
示例代码
Context context = new Context("key", "value");
BlockList block = client.listBlocksWithResponse(new BlockBlobListBlocksOptions(BlockListType.ALL)
.setLeaseId(leaseId)
.setIfTagsMatch(tags), timeout, context).getValue();
System.out.println("Committed Blocks:");
block.getCommittedBlocks().forEach(b -> System.out.printf("Name: %s, Size: %d", b.getName(), b.getSizeLong()));
System.out.println("Uncommitted Blocks:");
block.getUncommittedBlocks().forEach(b -> System.out.printf("Name: %s, Size: %d", b.getName(), b.getSizeLong()));
参数:
返回:
openSeekableByteChannelWrite
public SeekableByteChannel openSeekableByteChannelWrite(BlockBlobSeekableByteChannelWriteOptions options)
在只写模式下打开可查找字节通道以上传 Blob。
参数:
返回:
SeekableByteChannel
对象,表示要用于写入 Blob 的通道。stageBlock
public void stageBlock(String base64BlockId, BinaryData data)
将指定的块上传到块 Blob 的“暂存区域”,以便稍后通过调用 commitBlockList 提交。 有关详细信息,请参阅 Azure Docs。
示例代码
BinaryData binaryData = BinaryData.fromStream(data, length);
client.stageBlock(base64BlockId, binaryData);
参数:
String
的 ,指定此块的 ID。 请注意,给定 Blob 的所有块 ID 必须具有相同的长度。
BinaryData
长度必须已定义,并且必须可重播,请参阅 BinaryData#isReplayable()。
stageBlock
public void stageBlock(String base64BlockId, InputStream data, long length)
将指定的块上传到块 Blob 的“暂存区域”,以便稍后通过调用 commitBlockList 提交。 有关详细信息,请参阅 Azure Docs。
示例代码
client.stageBlock(base64BlockId, data, length);
参数:
String
的 ,指定此块的 ID。 请注意,给定 Blob 的所有块 ID 必须具有相同的长度。
stageBlockFromUrl
public void stageBlockFromUrl(String base64BlockId, String sourceUrl, BlobRange sourceRange)
创建一个新块,该块要作为 Blob 的一部分提交,其中的内容从 URL 读取。 有关详细信息,请参阅 Azure Docs。
示例代码
client.stageBlockFromUrl(base64BlockId, sourceUrl, new BlobRange(offset, count));
参数:
String
的 ,指定此块的 ID。 请注意,给定 Blob 的所有块 ID 必须具有相同的长度。
stageBlockFromUrlWithResponse
public Response
创建一个新块,该块要作为 Blob 的一部分提交,其中的内容从 URL 读取。 有关详细信息,请参阅 Azure Docs。
示例代码
BlobRequestConditions sourceRequestConditions = new BlobRequestConditions()
.setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));
Context context = new Context("key", "value");
System.out.printf("Staging block from URL completed with status %d%n",
client.stageBlockFromUrlWithResponse(new BlockBlobStageBlockFromUrlOptions(base64BlockId, sourceUrl)
.setSourceRange(new BlobRange(offset, count)).setLeaseId(leaseId)
.setSourceRequestConditions(sourceRequestConditions), timeout, context).getStatusCode());
参数:
返回:
stageBlockFromUrlWithResponse
public Response
创建一个新块,该块要作为 Blob 的一部分提交,其中的内容从 URL 读取。 有关详细信息,请参阅 Azure Docs。
示例代码
BlobRequestConditions sourceRequestConditions = new BlobRequestConditions()
.setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));
Context context = new Context("key", "value");
System.out.printf("Staging block from URL completed with status %d%n",
client.stageBlockFromUrlWithResponse(base64BlockId, sourceUrl, new BlobRange(offset, count), null,
leaseId, sourceRequestConditions, timeout, context).getStatusCode());
参数:
String
的 ,指定此块的 ID。 请注意,给定 Blob 的所有块 ID 必须具有相同的长度。
返回:
stageBlockWithResponse
public Response
将指定的块上传到块 Blob 的“暂存区域”,以便稍后通过调用 commitBlockList 提交。 有关详细信息,请参阅 Azure Docs。
示例代码
Context context = new Context("key", "value");
BinaryData binaryData = BinaryData.fromStream(data, length);
BlockBlobStageBlockOptions options = new BlockBlobStageBlockOptions(base64BlockId, binaryData)
.setContentMd5(md5)
.setLeaseId(leaseId);
System.out.printf("Staging block completed with status %d%n",
client.stageBlockWithResponse(options, timeout, context).getStatusCode());
参数:
返回:
stageBlockWithResponse
public Response
将指定的块上传到块 Blob 的“暂存区域”,以便稍后通过调用 commitBlockList 提交。 有关详细信息,请参阅 Azure Docs。
示例代码
Context context = new Context("key", "value");
System.out.printf("Staging block completed with status %d%n",
client.stageBlockWithResponse(base64BlockId, data, length, md5, leaseId, timeout, context).getStatusCode());
参数:
String
的 ,指定此块的 ID。 请注意,给定 Blob 的所有块 ID 必须具有相同的长度。
返回:
upload
public BlockBlobItem upload(BinaryData data)
创建新的块 Blob。 默认情况下,此方法不会覆盖现有 Blob。 更新现有块 Blob 会覆盖该 Blob 的所有现有元数据。 PutBlob 不支持部分更新;现有 Blob 的内容将被新内容覆盖。 若要执行块 Blob 的部分更新,请使用 PutBlock 和 PutBlockList。 有关详细信息,请参阅 Azure Docs。
示例代码
BinaryData binaryData = BinaryData.fromStream(data, length);
System.out.printf("Uploaded BlockBlob MD5 is %s%n",
Base64.getEncoder().encodeToString(client.upload(binaryData).getContentMd5()));
参数:
BinaryData
长度必须已定义,并且必须可重播,请参阅 BinaryData#isReplayable()。
返回:
upload
public BlockBlobItem upload(BinaryData data, boolean overwrite)
创建新的块 Blob,或更新现有块 Blob 的内容。 更新现有块 Blob 会覆盖该 Blob 的所有现有元数据。 PutBlob 不支持部分更新;现有 Blob 的内容将被新内容覆盖。 若要执行块 Blob 的部分更新,请使用 PutBlock 和 PutBlockList。 有关详细信息,请参阅 Azure Docs。
示例代码
boolean overwrite = false;
BinaryData binaryData = BinaryData.fromStream(data, length);
System.out.printf("Uploaded BlockBlob MD5 is %s%n",
Base64.getEncoder().encodeToString(client.upload(binaryData, overwrite).getContentMd5()));
参数:
BinaryData
长度必须已定义,并且必须可重播,请参阅 BinaryData#isReplayable()。
返回:
upload
public BlockBlobItem upload(InputStream data, long length)
创建新的块 Blob。 默认情况下,此方法不会覆盖现有 Blob。 更新现有块 Blob 会覆盖该 Blob 的所有现有元数据。 PutBlob 不支持部分更新;现有 Blob 的内容将被新内容覆盖。 若要执行块 Blob 的部分更新,请使用 PutBlock 和 PutBlockList。 有关详细信息,请参阅 Azure Docs。
示例代码
System.out.printf("Uploaded BlockBlob MD5 is %s%n",
Base64.getEncoder().encodeToString(client.upload(data, length).getContentMd5()));
参数:
返回:
upload
public BlockBlobItem upload(InputStream data, long length, boolean overwrite)
创建新的块 Blob,或更新现有块 Blob 的内容。 更新现有块 Blob 会覆盖该 Blob 的所有现有元数据。 PutBlob 不支持部分更新;现有 Blob 的内容将被新内容覆盖。 若要执行块 Blob 的部分更新,请使用 PutBlock 和 PutBlockList。 有关详细信息,请参阅 Azure Docs。
示例代码
boolean overwrite = false;
System.out.printf("Uploaded BlockBlob MD5 is %s%n",
Base64.getEncoder().encodeToString(client.upload(data, length, overwrite).getContentMd5()));
参数:
返回:
uploadFromUrl
public BlockBlobItem uploadFromUrl(String sourceUrl)
创建新的块 Blob,或更新现有块 Blob 的内容。
更新现有块 Blob 会覆盖该 Blob 的所有现有元数据。 PutBlobFromUrl 不支持部分更新;现有 Blob 的内容将被新内容覆盖。 有关详细信息,请参阅 Azure Docs。
示例代码
System.out.printf("Uploaded BlockBlob from URL, MD5 is %s%n",
Base64.getEncoder().encodeToString(client.uploadFromUrl(sourceUrl).getContentMd5()));
参数:
返回:
uploadFromUrl
public BlockBlobItem uploadFromUrl(String sourceUrl, boolean overwrite)
创建新的块 Blob,或更新现有块 Blob 的内容。
更新现有块 Blob 会覆盖该 Blob 的所有现有元数据。 PutBlobFromUrl 不支持部分更新;现有 Blob 的内容将被新内容覆盖。 有关详细信息,请参阅 Azure Docs。
示例代码
boolean overwrite = false;
System.out.printf("Uploaded BlockBlob from URL, MD5 is %s%n",
Base64.getEncoder().encodeToString(client.uploadFromUrl(sourceUrl, overwrite).getContentMd5()));
参数:
返回:
uploadFromUrlWithResponse
public Response
创建新的块 Blob,或更新现有块 Blob 的内容。
更新现有块 Blob 会覆盖该 Blob 的所有现有元数据。 PutBlobFromUrl 不支持部分更新;现有 Blob 的内容将被新内容覆盖。 有关详细信息,请参阅 Azure Docs。
若要避免覆盖,请将“*”传递给 setIfNoneMatch(String ifNoneMatch)。
示例代码
BlobHttpHeaders headers = new BlobHttpHeaders()
.setContentMd5(MessageDigest.getInstance("MD5").digest("data".getBytes(StandardCharsets.UTF_8)))
.setContentLanguage("en-US")
.setContentType("binary");
Map<String, String> metadata = Collections.singletonMap("metadata", "value");
Map<String, String> tags = Collections.singletonMap("tag", "value");
byte[] md5 = MessageDigest.getInstance("MD5").digest("data".getBytes(StandardCharsets.UTF_8));
BlobRequestConditions requestConditions = new BlobRequestConditions()
.setLeaseId(leaseId)
.setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));
Context context = new Context("key", "value");
System.out.printf("Uploaded BlockBlob MD5 is %s%n", Base64.getEncoder()
.encodeToString(client.uploadFromUrlWithResponse(new BlobUploadFromUrlOptions(sourceUrl)
.setHeaders(headers).setTags(tags).setTier(AccessTier.HOT).setContentMd5(md5)
.setDestinationRequestConditions(requestConditions), timeout, context)
.getValue()
.getContentMd5()));
参数:
返回:
uploadWithResponse
public Response
创建新的块 Blob,或更新现有块 Blob 的内容。 更新现有块 Blob 会覆盖该 Blob 的所有现有元数据。 PutBlob 不支持部分更新;现有 Blob 的内容将被新内容覆盖。 若要执行块 Blob 的部分更新,请使用 PutBlock 和 PutBlockList。 有关详细信息,请参阅 Azure Docs。
若要避免覆盖,请将“*”传递给 setIfNoneMatch(String ifNoneMatch)。
示例代码
BlobHttpHeaders headers = new BlobHttpHeaders()
.setContentMd5(MessageDigest.getInstance("MD5").digest("data".getBytes(StandardCharsets.UTF_8)))
.setContentLanguage("en-US")
.setContentType("binary");
Map<String, String> metadata = Collections.singletonMap("metadata", "value");
Map<String, String> tags = Collections.singletonMap("tag", "value");
byte[] md5 = MessageDigest.getInstance("MD5").digest("data".getBytes(StandardCharsets.UTF_8));
BlobRequestConditions requestConditions = new BlobRequestConditions()
.setLeaseId(leaseId)
.setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));
Context context = new Context("key", "value");
System.out.printf("Uploaded BlockBlob MD5 is %s%n", Base64.getEncoder()
.encodeToString(client.uploadWithResponse(new BlockBlobSimpleUploadOptions(data, length)
.setHeaders(headers).setMetadata(metadata).setTags(tags).setTier(AccessTier.HOT).setContentMd5(md5)
.setRequestConditions(requestConditions), timeout, context)
.getValue()
.getContentMd5()));
参数:
返回:
uploadWithResponse
public Response
创建新的块 Blob,或更新现有块 Blob 的内容。 更新现有块 Blob 会覆盖该 Blob 的所有现有元数据。 PutBlob 不支持部分更新;现有 Blob 的内容将被新内容覆盖。 若要执行块 Blob 的部分更新,请使用 PutBlock 和 PutBlockList。 有关详细信息,请参阅 Azure Docs。
若要避免覆盖,请将“*”传递给 setIfNoneMatch(String ifNoneMatch)。
示例代码
BlobHttpHeaders headers = new BlobHttpHeaders()
.setContentMd5(MessageDigest.getInstance("MD5").digest("data".getBytes(StandardCharsets.UTF_8)))
.setContentLanguage("en-US")
.setContentType("binary");
Map<String, String> metadata = Collections.singletonMap("metadata", "value");
byte[] md5 = MessageDigest.getInstance("MD5").digest("data".getBytes(StandardCharsets.UTF_8));
BlobRequestConditions requestConditions = new BlobRequestConditions()
.setLeaseId(leaseId)
.setIfUnmodifiedSince(OffsetDateTime.now().minusDays(3));
Context context = new Context("key", "value");
System.out.printf("Uploaded BlockBlob MD5 is %s%n", Base64.getEncoder()
.encodeToString(client.uploadWithResponse(data, length, headers, metadata, AccessTier.HOT, md5,
requestConditions, timeout, context)
.getValue()
.getContentMd5()));
参数:
返回: