微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PrematureCloseException:连接在响应期间过早关闭 当使用 azure blob 下载时

如何解决PrematureCloseException:连接在响应期间过早关闭 当使用 azure blob 下载时

我尝试通过以下代码行从 azure blob 存储下载大文件

            BlobClient blobAsyncclient = new BlobServiceClientBuilder().connectionString(connectionString1)
                    .buildClient()
                    .getBlobContainerClient(blob)
                    .getBlobClient(client);
blobAsyncclient.downloadToFile(path);

我得到了这个例外:

reactor.core.Exceptions$ReactiveException: reactor.netty.http.client.HttpClientOperations$PrematureCloseException: Connection prematurely closed DURING response
    at reactor.core.Exceptions.propagate(Exceptions.java:326)
    at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:91)
    at reactor.core.publisher.Mono.block(Mono.java:1500)
    at com.azure.storage.common.implementation.StorageImplUtils.blockWithOptionalTimeout(StorageImplUtils.java:99)
    at com.azure.storage.blob.specialized.BlobClientBase.downloadToFileWithResponse(BlobClientBase.java:557)
    at com.gooddata.cloudresource.service.connection.BlobStorageDataSourceService.validateConnection(BlobStorageDataSourceService.java:89)
    at com.gooddata.cloudresource.model.worker.CloudConnectionValidationWorker.lambda$doProcesstask$1(CloudConnectionValidationWorker.java:55)
    at java.util.Optional.ifPresent(Optional.java:159)
    at com.gooddata.cloudresource.model.worker.CloudConnectionValidationWorker.doProcesstask(CloudConnectionValidationWorker.java:55)
    at com.gooddata.cloudresource.model.worker.CloudConnectionValidationWorker.doProcesstask(CloudConnectionValidationWorker.java:33)
    at com.gooddata.gcf.worker.AbstractWorker.processtask(AbstractWorker.java:27)
    at com.gooddata.gcf.http.TaskHolder.call(TaskHolder.java:52)
    at com.gooddata.gcf.http.TaskHolder.call(TaskHolder.java:26)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
    Suppressed: java.lang.Exception: #block terminated with an error

使用 ParallelTransferOptions 更改 downloadToFileWithResponse 后,有时每个块的块大小为 0.5MB。

有人能告诉我为什么会这样吗?

我们有任何稳定的解决方案吗?

解决方法

请检查此link

如果您正在从 Azure blob 下载大文件,您可以尝试使用共享访问签名 (SAS),或以块的形式提供文件

要分块提供文件,请检查此 thread

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。