我有一个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/
中的所有文件由于
答案 0 :(得分:1)
由于每个blob都是一个单独的Web资源,因此上面的函数只会下载一个文件。您可以做的一件事是使用您正在使用的逻辑列出所有blob,然后首先在服务器上下载这些blob,压缩它们并将zip文件返回给最终用户。
答案 1 :(得分:1)
添加更多详情。您将需要使用客户端库提供的列表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的方案。
答案 2 :(得分:0)
现在使用AzCopy功能,它有很多支持。
https://docs.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-v10