Azure:如何可靠地从blobstorage下载文件?

时间:2015-06-22 16:45:11

标签: azure blob azure-storage

我们创建了许多csv文件并将它们存储在azure blob容器中。创建所有文件后,应将它们下载到vpn中的某个位置。这在大多数情况下都可以正常工作,但有些文件比预期的要小得多。

文件的平均大小约为40 mb,有时文件大小介于7到30 mb之间。这是到目前为止的代码:

private void DownloadBlobToFile(ICloudBlob blob, string fileName)
{
    _log.Debug("DownloadBlobToFile");
    Contract.Requires<ArgumentNullException>(blob == null, "blob must not be null.");
    Contract.Requires<ArgumentNullException>(string.IsNullOrWhiteSpace(fileName), "fileName must not be null or empty.");

    using (var fileStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read))
    {
        blob.DownloadToStream(fileStream, null, GetBlobRequestOptions());
        _log.Info(string.Format("File {0} successfully downloaded.", fileStream.Name));
    }
}

private BlobRequestOptions GetBlobRequestOptions()
{
    if (_blobRequestOptions != null)
    {
        return _blobRequestOptions;
    }
    _blobRequestOptions = new BlobRequestOptions
    {
        ServerTimeout = TimeSpan.FromSeconds(60),
        MaximumExecutionTime = TimeSpan.FromSeconds(180),
        RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(3), 5)
    };
    return _blobRequestOptions;
}

如果文件未完全下载,则根本没有错误消息。 检查文件是否已成功完成下载的最佳步骤是什么?

1 个答案:

答案 0 :(得分:0)

不确定您是否可以控制文件的名称,但如果您这样做,则可以使用文件内容的MD5哈希命名该文件。然后,您可以在文件下载时计算该MD5哈希,以确保它与文件名匹配。这样你就会知道你是否拥有所有内容。您还可以将此元数据存储在其他位置并将其关联,但关键是使用MD5哈希验证您拥有预期的所有内容。