如何下载 Azure 容器目录中的所有文件?

5
我是一位有用的助手,可以为您翻译文本。
我有一个aspnet应用程序,我将文件上传到Azure Blob。我知道Azure在容器中不创建结构路径,只创建Blob,但是你可以在URI上放置“/”来模拟目录。
例如,我上传了一系列文件,我的URI就像这样:

http://myaccount.windowsazure.blob.net/MyProtocolID-01/MyDocumentID-01/FileName01.jpg http://myaccount.windowsazure.blob.net/MyProtocolID-01/MyDocumentID-01/FileName02.jpg http://myaccount.windowsazure.blob.net/MyProtocolID-01/MyDocumentID-01/FileName03.jpg

我的下载方法:
 public RemoteFile Download(DownloadRequest request)
    {
        var fileFinal = string.Format("{0}/{1}/{2}",request.IDProtocol ,request.IDDocument, request.FileName);

        var blobBlock = InitializeDownload(fileFinal);

        if (!blobBlock.Exists())
        {
            throw new FileNotFoundException("Error");
        }

        var stream = new MemoryStream();

        blobBlock.DownloadToStream(stream);

        return File(request.FileName)
    }

 private CloudBlob InitializeDownload(string uri)
    {
        var blobBlock = _blobClient.GetBlobReference(uri);
        return blobBlock;
    }

这样,我只能获取一个文件。但是我需要查看和下载http://myaccount.windowsazure.blob.net/MyProtocolID-01/MyDocumentID-01/内的所有文件。
谢谢。
3个回答

2
添加更多细节。您需要使用客户端库提供的列表 API 之一:CloudBlobContainer.ListBlobs()、CloudBlobContainer.ListBlobsSegmented() 和 CloudBlobContainer.ListBlobsSegmentedAsync()(以及各种重载)。您可以指定目录前缀,服务将仅枚举与前缀匹配的 blob。然后您可以下载每个 blob。根据您的情况,您可能还想查看'useFlatBlobListing'参数。 http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.blob.cloudblobcontainer.listblobs.aspx 此外,AzCopy(请参阅http://blogs.msdn.com/b/windowsazurestorage/archive/2012/12/03/azcopy-uploading-downloading-files-for-windows-azure-blobs.aspx)也支持在给定目录路径中下载所有 blob 的这种情况。

1

1

由于每个 Blob 都是一个独立的 Web 资源,上述函数只会下载一个文件。您可以使用您正在使用的逻辑列出所有 Blob,然后首先在您的服务器上下载这些 Blob,将它们压缩并将该 zip 文件返回给最终用户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接