尝试使用 java sdk 下载大小为 2 GB 的页面 blob,但由于下载的文件大小与实际文件大小不匹配而失败并出现存储异常
尽管下载的文件大小略有变化,但多次尝试会看到相同的结果。将超时设置为最大值也无济于事。此外,当我使用 Azure 门户下载相同的 vhd 时,我看到下载完成但只是部分完成。它通常与使用 SDK 下载的相媲美。
在 SDK 代码中,我可以看到正在使用 HTTpUrlConnection。那会是个问题吗?Windows 机器上的相同代码具有相似的结果,但只有下载的文件大小多几 MB,但不完整。
关于如何让它工作的任何想法?
使用的代码片段是
URI blobEndpoint = null;
String uriString = "http://" + "sorageaccount" + ".blob.core.windows.net";
blobEndpoint = new URI(uriString);
CloudBlobClient blobClient = new CloudBlobClient(blobEndpoint,
new StorageCredentialsAccountAndKey("abcd", "passed"));
CloudBlobContainer container = blobClient.getContainerReference(Constants.STORAGE_CONTAINER_NAME);
CloudPageBlob pageBlob = container.getPageBlobReference("http://abcd.blob.core.windows.net/sc/someimg.vhd");
System.out.println("Page Blob Name: " + pageBlob.getName());
OutputStream outStream = new FileOutputStream(new File("/Users/myself/Downloads/TestDownload.vhd"));
System.out.println("Starting download now ... ");
BlobRequestOptions options = new BlobRequestOptions();
options.setUseTransactionalContentMD5(true);
options.setStoreBlobContentMD5 (true); // Set full blob level MD5
options.setTimeoutIntervalInMs(Integer.MAX_VALUE);
options.setRetryPolicyFactory(new RetryLinearRetry());
pageBlob.download(outStream, null, options, null);
outStream.close();