如何从ASP.NET MVC5从Azure BLOB存储下载文件
我能够从web应用程序下载Azure Blob存储中的文件 一旦我得到我的Azure Blob存储列表,它就不会被下载 输入下载blob时出错 如果您能查看我的代码并告诉我问题所在,我将不胜感激如何从ASP.NET MVC5从Azure BLOB存储下载文件,azure,asp.net-mvc-5,azure-storage-blobs,Azure,Asp.net Mvc 5,Azure Storage Blobs,我能够从web应用程序下载Azure Blob存储中的文件 一旦我得到我的Azure Blob存储列表,它就不会被下载 输入下载blob时出错 如果您能查看我的代码并告诉我问题所在,我将不胜感激 public string DownloadBlob() { CloudBlobContainer container = GetCloudBlobContainer(); CloudBlockBlob blob = container.GetBlockBlobR
public string DownloadBlob()
{
CloudBlobContainer container = GetCloudBlobContainer();
CloudBlockBlob blob = container.GetBlockBlobReference("myBlob");
using (var fileStream = System.IO.File.OpenWrite(@"C:\BlobTest"))
{
blob.DownloadToStream(fileStream);
}
return "success!";
}
我已经测试了您的代码,它在我的MVC web应用程序中工作,如下所示
public ActionResult Download()
{
ContentResult contentResult = new ContentResult();
contentResult.Content = DownloadBlob();
return contentResult;
}
public static string DownloadBlob()
{
try
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=leeliublob;AccountKey=O7xB6ebGq8e86XQSy2vkvSi/x/e9l9FhLqayXcbz1R+E0mIcJ5Wjkly1DsQPYY5dF2JrAVHtBozbJo29ZrrGJA==;EndpointSuffix=core.windows.net");
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = cloudBlobClient.GetContainerReference("mycontainer");
CloudBlockBlob blob = container.GetBlockBlobReference("4.PNG");
using (var fileStream = System.IO.File.OpenWrite(@"C:\Test\BlobTest.PNG"))
{
blob.DownloadToStream(fileStream);
}
return "success!";
}
catch(Exception ex)
{
return ex.StackTrace;
}
}
我认为这是有关MVC应用程序权限的问题
您的MVC应用程序可能使用IIS的虚拟帐户,如下所示,它可能无法访问您的C磁盘。
要解决此问题,有两种方法:
请尝试下载到其他磁盘,如E或D
请将用户组身份验证用户添加到该文件或文件夹,如下所示
更新:
我将您的问题复制如下:
我们需要在C盘根目录下创建一个文件夹,如下所示,因为您的web应用程序没有C盘根目录的权限:
我已经测试了您的代码,它在我的MVC web应用程序中工作,如下所示
public ActionResult Download()
{
ContentResult contentResult = new ContentResult();
contentResult.Content = DownloadBlob();
return contentResult;
}
public static string DownloadBlob()
{
try
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=leeliublob;AccountKey=O7xB6ebGq8e86XQSy2vkvSi/x/e9l9FhLqayXcbz1R+E0mIcJ5Wjkly1DsQPYY5dF2JrAVHtBozbJo29ZrrGJA==;EndpointSuffix=core.windows.net");
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = cloudBlobClient.GetContainerReference("mycontainer");
CloudBlockBlob blob = container.GetBlockBlobReference("4.PNG");
using (var fileStream = System.IO.File.OpenWrite(@"C:\Test\BlobTest.PNG"))
{
blob.DownloadToStream(fileStream);
}
return "success!";
}
catch(Exception ex)
{
return ex.StackTrace;
}
}
我认为这是有关MVC应用程序权限的问题
您的MVC应用程序可能使用IIS的虚拟帐户,如下所示,它可能无法访问您的C磁盘。
要解决此问题,有两种方法:
请尝试下载到其他磁盘,如E或D
请将用户组身份验证用户添加到该文件或文件夹,如下所示
更新:
我将您的问题复制如下:
我们需要在C盘根目录下创建一个文件夹,如下所示,因为您的web应用程序没有C盘根目录的权限:
您能否共享错误消息或错误代码'System.UnauthorizedAccessException:'C:\BlobTest'경로에 대한 액세스가 거부되었습니다. 错误消息上面的代码将在web服务器而不是客户端计算机上下载文件。该错误清楚地表明您没有在C:\上写入的权限。您已成功地将IU权限添加到文件中。但是,也会发生相同的错误。UnauthorizedAccessException表示以下四种情况之一:调用方没有所需的权限。该文件是正在使用的可执行文件。路径是一个目录。路径指定为只读文件。是否可以共享错误消息或错误代码'System.UnauthorizedAccessException:'C:\BlobTest'경로에 대한 액세스가 거부되었습니다. 错误消息上面的代码将在web服务器而不是客户端计算机上下载文件。该错误清楚地表明您没有在C:\上写入的权限。您已成功地将IU权限添加到文件中。但是,也会发生相同的错误。UnauthorizedAccessException表示以下四种情况之一:调用方没有所需的权限。该文件是正在使用的可执行文件。路径是一个目录。路径指定为只读文件。错误仍然出现。您知道将文件从Azure Blob存储保存到C驱动器的其他方法吗@김세림 我已经更新了我的答案,希望对你有所帮助you@LeeLiu,谢谢你的回答。请注意,在StackOverflow,我们希望您将代码作为文本而不是图像发布。@PeterBons好的,谢谢您提醒我,我会修改它。错误仍然出现。您知道其他将文件从Azure Blob存储保存到我的C驱动器的方法吗@김세림 我已经更新了我的答案,希望对你有所帮助you@LeeLiu,谢谢你的回答。请注意,在StackOverflow,我们希望您将代码作为文本而不是图像发布。@PeterBons好的,谢谢您提醒我,我会修改它。