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

Android使用Java从Azure Blob Storage下载大文件并获取进度咨询

实现Azure Blob大文件下载进度监听方案

核心原理

你使用的azure-storage-android:2.0.0SDK原生提供了ProgressReceiver回调接口,专门用于统计上传、下载的字节进度,无需自己实现分片计数逻辑。

实现步骤

  1. 提前配置好所需权限:网络权限、存储读写权限,安卓10及以上版本还要配置分区存储相关权限。
  2. 修改原有下载逻辑,调用downloadToFile的带进度回调的重载方法,提前获取Blob文件总大小即可计算进度百分比。

完整代码示例

Gradle依赖(和原有配置一致)

implementation 'com.microsoft.azure.android:azure-storage-android:2.0.0'

带进度监听的下载逻辑

// 大文件下载必须放在子线程执行,禁止阻塞主线程
new Thread(() -> {
    try {
        CloudStorageAccount account = CloudStorageAccount.parse(storageConnectionString);
        CloudBlobClient serviceClient = account.createCloudBlobClient();
        CloudBlobContainer container = serviceClient.getContainerReference("test");
        Iterable<ListBlobItem> blobs = container.listBlobs();
        for (ListBlobItem listBlobItem : blobs) {
            CloudBlockBlob cloudBlob = (CloudBlockBlob) listBlobItem;
            // 先获取当前Blob的总大小,用于进度计算
            long totalFileSize = cloudBlob.getProperties().getLength();
            // 调用带进度回调的下载方法
            cloudBlob.downloadToFile(fileSample.getAbsolutePath(), null, null, new ProgressReceiver() {
                @Override
                public void progressCallback(long bytesTransferred, long totalBytes) {
                    // 回调默认运行在后台线程,更新UI必须切换到主线程
                    runOnUiThread(() -> {
                        // 计算下载进度百分比
                        int progress = (int) ((bytesTransferred * 100.0) / totalFileSize);
                        // 直接更新进度条控件即可
                        mProgressBar.setProgress(progress);
                        mProgressTip.setText(String.format("已下载:%dMB / %dMB", 
                            bytesTransferred/(1024*1024), totalFileSize/(1024*1024)));
                    });
                }
            }, null);
            Log.e("INFO", "文件下载完成");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}).start();

注意事项

  • 如果要下载多个文件且展示全局总进度,可提前遍历所有Blob累加总大小,再在每个文件的回调中累加已传输字节数计算全局进度即可。
  • 1-2GB的大文件建议配合前台Service使用,避免APP退到后台被系统回收导致下载中断。
  • 不要在progressCallback中执行耗时操作,避免阻塞下载线程导致进度更新卡顿。

内容的提问来源于stack exchange,提问作者Harsh Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 00:27:04