java - Azure blobs Java sdk 无法返回对象的 versionID 列表
问题描述
我正在尝试通过 Java SDK 版本 12.10.2 获取 Azure blob 的 versionID 列表,但它只返回 HTTP 错误 400 和以下错误消息
com.azure.storage.blob.models.BlobStorageException: Status code 400, "<?xml version="1.0" encoding="utf-8"?><Error><Code>InvalidQueryParameterValue</Code><Message>Value for one of the query parameters specified in the request URI is invalid.
RequestId:bd7e9a20-401e-003e-6d7b-37d0dd000000
Time:2021-04-22T13:29:12.0965760Z</Message><QueryParameterName>include</QueryParameterName><QueryParameterValue>versions</QueryParameterValue><Reason>Invalid query parameter value.</Reason></Error>"
而且,这是我的 Java 代码:
public static BlobContainerAsyncClient getAzureAsyncClient(String accountName, String accountKey, String endpoint) {
String connectionString = getConnectionString(accountName, accountKey, endpoint);
BlobContainerAsyncClient blobServiceClient = new BlobContainerClientBuilder()
.connectionString(connectionString)
.serviceVersion(version)
.buildAsyncClient();
RWLog.MAIN.info("Azure Storage Async Service Client created for " + accountName);
return blobServiceClient;
}
BlobContainerAsyncClient containerClient = AzureConnection.getAzureAsyncClient(folder.getBucket(), folder.getSecretKey(), folder.getEndpoint());
ListBlobsOptions ops = new ListBlobsOptions();
ops.getDetails().setRetrieveVersions(true);
ops.setPrefix(blobKey);
PagedFlux<BlobItem> list =
containerClient.listBlobsByHierarchy("/", ops);
Azure blobs 服务器似乎无法识别 Java SDK 构建的 HTTP 请求。服务器端无法处理来自 Java 客户端的包含版本的查询。有什么想法吗?
解决方案
只需尝试使用 12.10.2 ofazure-storage-blob
来获取所有版本的 blob:
public static void main(String[] args) {
String connString = "";
String containerName = "";
String blobName = "";
BlobServiceClient client = new BlobServiceClientBuilder().connectionString(connString).buildClient();
BlobContainerClient blobContainerClient = client.getBlobContainerClient(containerName);
ListBlobsOptions options = new ListBlobsOptions().setPrefix(blobName)
.setDetails(new BlobListDetails().setRetrieveVersions(true));
Iterator<BlobItem> it = blobContainerClient.listBlobs(options, null).iterator();
while (it.hasNext()) {
BlobItem item = it.next();
System.out.println(" versionID: " + item.getVersionId());
}
}
结果:
推荐阅读
- python - 合并具有多个键且一个键为列名的 DataFrame
- r - 如何编辑 ggVennDiagram 交叉点填充区域
- javascript - 如何在平板电脑分辨率中找到 x 和 y 位置并通过用户输入的警报消息进行验证
- python - 如何使用 kivy 在 python 中动态访问单独的相机类(无需预初始化相机)
- exe - 如何检测.exe文件是否包含未编译的代码
- arrays - 使用 And/Or 运算符最大化按位函数
- c++ - 如何将github存储库中的cpp项目编译为exe?
- javascript - 将 JS 脚本转换为 React 组件
- reactjs - 如何使用 moxios 响应测试 React 组件
- javascript - 如何使用这些函数包装器少重复自己?