我正在编写一个上传/下载Azure blob存储文件的服务。我上传部分工作正常。我一直在阅读如何下载文件,似乎有几种方法可以实现。
我设法将该文件下载为一个工作正常的流,但我在某处读到可以简单地传递文件的绝对URI并让浏览器下载该文件。
我不知道该怎么做。我是否将URI发送到请求输出流?这样做的任何建议或例子都表示赞赏。我使用C#,但我们有其他客户使用此服务(例如Angular)。
答案 0 :(得分:3)
您需要创建端点(GET)以获取公共URL,如Azure Docs中所述,并且:
第三个选项,如果您只需要客户端让此文件传递流,那么创建端点返回流,将Blob读取到内存流,并将内存流返回给客户端。然后,您不需要使用身份验证和匿名访问。
答案 1 :(得分:0)
下载源文件:
public static Stream DownloadFile(string blobName)
{
CloudBlobContainer container = GetContainer();
CloudBlob blob = container.GetBlobReference(blobName);
MemoryStream memoryStream = new MemoryStream();
blob.DownloadToStream(memoryStream);
memoryStream.Position = 0;
return memoryStream;
}
设置并返回容器:
private static CloudBlobContainer GetContainer()
{
string accountName = "***";
string accountKey = "***";
string endpoint = $"https://{accountName}.blob.core.windows.net/";
string containerName = "***";
StorageCredentials storageCredentials = new StorageCredentials(accountName, accountKey);
CloudStorageAccount cloudStorageAccount = new CloudStorageAccount(
storageCredentials, new Uri(endpoint), null, null, null);
CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
CloudBlobContainer container = cloudBlobClient.GetContainerReference(containerName);
container.CreateIfNotExists();
return container;
}