You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android使用Azure Blob Storage SDK获取Blob属性时参数错误问题

问题解决思路

1. getLastModified()/getCreationTime() 参数错误问题

这个错误是ProGuard/R8混淆破坏了Azure SDK方法签名导致的。Azure Storage SDK的BlobProperties类方法在未配置正确混淆规则时,会被R8篡改方法签名,让原本无参的方法变成需要传入参数的形式。

解决方法:在项目的proguard-rules.pro中添加以下混淆规则:

-keep class com.azure.storage.** { *; }
-keep interface com.azure.storage.** { *; }
-keep class com.azure.core.** { *; }
-keep interface com.azure.core.** { *; }

如果使用R8全模式(fullMode),还需额外添加:

-keepattributes Signature, InnerClasses, EnclosingMethod

添加后重新编译打包,即可恢复方法的正确签名。

2. containerClient.listBlobs()无返回结果问题

默认listBlobs()仅列出容器根目录下的Blob,且需处理分页结果(Azure SDK返回的是PagedIterable,单页可能为空但后续页有数据);若要列出子目录下的Blob,必须配置递归参数。

正确调用方式:

// 配置递归列出所有层级Blob,处理分页
ListBlobsOptions options = new ListBlobsOptions()
    .setRecursive(true)
    .setPrefix(""); // 可设置前缀过滤特定路径的Blob

PagedIterable<BlobItem> blobItems = containerClient.listBlobs(options, Duration.ofSeconds(30));
for (BlobItem blobItem : blobItems) {
    Log.d("Blob", "名称:" + blobItem.getName());
    // 其他业务操作
}

若仍无结果,排查以下点:

  • 容器名称是否正确(注意大小写敏感)
  • Blob是否匹配设置的前缀路径(如果配置了prefix)
  • 客户端权限是否足够(SAS令牌或连接字符串需包含Storage Blob Data Reader及以上权限)

额外排查:

你提到Azure门户显示请求已到达,可查看存储账户的操作日志,检查listBlobs请求的响应状态码:

  • 若为200但返回空列表,说明当前查询条件下无匹配Blob
  • 若为4xx/5xx,根据错误码排查权限或服务端异常

内容的提问来源于stack exchange,提问作者Alexander Jæger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:26:08