使用Azure文件云存储上的进度上传

时间:2017-08-03 14:50:12

标签: java android azure azure-storage

我希望将一些数据上传到Azure云空间。为此,我使用了azure-storage-android库。上传工作正常但我正在尝试管理上传进度时遇到问题。我没有找到一个漂亮的解决方案。

我的第一个想法是这段代码:

OperationContext ctxt = new OperationContext();

ctxt.getRequestCompletedEventHandler().addListener(new StorageEvent<RequestCompletedEvent>() {
    @Override
    public void eventOccurred(RequestCompletedEvent eventArg) {
        totalUploaded = totalUploaded+rangeInBytes;
        int progressPercentage = (int) ((float)totalUploaded / (float) totalLength * 100);
        //range is 4Mb, totalUploaded and totalLength are initialized higher in the method.
        //here, insert a callback to display the progress

        publishProgress(progressPercentage);
    }
});

destinationFile.upload(new FileInputStream(file),file.length(),null,null,ctxt);

将此ctxt对象与我的上传请求一起使用。它工作但上传每4MB上传进度(默认值),这是有问题的,因为我的文件大小约5-10MB。它创造了一个不顺利的进步。我试图降低4MB的范围,但它实际上显着降低了上传速度。为什么?我不确定,但我猜测每个X MB都有一个授权过程而不是4个创建延迟(再一次,我不确定,可能是其他的东西)。

所以我的问题是,有没有有效的方法来跟踪使用文件云共享服务上传的进度?我想过通过他们的REST Api使用分段上传,但我已经看了their API,我没有看到任何迹象表明可以做到这一点。

1 个答案:

答案 0 :(得分:0)

我查看了Azure Storage SDK for Android的源代码,然后我发现单位进度取决于{ "message": "This endpoint requires at least one of the following scopes: all_trips_lite, request, all_trips", "code": "unauthorized" } 的值,该值在类CloudFile中定义,默认等于{{ 3}}等于streamWriteSizeInBytes值的值为4MB。

因此,如果您想减少单位进度大小,可以在执行Constants.MAX_BLOCK_SIZE方法之前尝试使用Constants.DEFAULT_STREAM_WRITE_IN_BYTES

希望它有所帮助。