4

我有一个 aspnet 应用程序,我将文件上传到 azure blobs。我知道 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/中的所有文件

谢谢

4

3 回答 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。

于 2013-11-14T23:18:06.190 回答
1

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

于 2013-11-14T04:46:53.667 回答
0

使用 AzCopy 功能,现在,它有很多支持。

https://docs.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-v10

于 2019-08-19T04:37:13.303 回答