我有一个现有的函数应用程序,它具有从 sftp 下载文件、处理文件并将文件上传到 blob 存储的功能。该功能应用程序已部署在azure中并且运行正常。但是,当我从 Visual Studio(本地)运行相同的操作时,我在将文件上传到 Blob 存储时遇到错误。
Microsoft.Azure.Storage.StorageException:此请求无权使用此权限执行此操作。
我确保此应用程序在存储帐户中分配了必要的贡献者角色(这就是它在azure中工作的原因)。我是否需要在本地设置或项目设置中配置任何其他设置,才能使这些功能像部署到 azure 时一样工作?或者存储帐户中是否有任何设置会覆盖从开发运行时执行上传操作但仅从天蓝色运行?
我确保使用本地设置,所有设置都是从应用程序配置复制的,其中包含存储帐户名称、blob 存储的连接字符串、sftp url 和包含 sft 站点凭据等的密钥库名称,
Update:忘记提及来自我的计算机的命令行的 az storage container upload 命令已成功上传文件。
update2:根据我的建议,我已遵循tutorial https://learn.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet我成功地创建了容器、上传 blob 并进行清理,没有出现错误。
然后我合并了代码来模拟简单的下载 blob 到内存流中,这也会引发错误
该请求无权使用此执行此操作
允许
(请参阅底部的完整日志)
下载 blob 的代码:
static async Task TokenCredentialsSample()
{
var tenantId = "xxxxx-xxxx-xxxx-xxxx-xxxxxxxx";
var tokenProvider = new AzureServiceTokenProvider().GetAccessTokenAsync("https://storage.azure.com/",tenantId);
var tokenCredential = new TokenCredential(tokenProvider.Result);
var storageCredentials = new StorageCredentials(tokenCredential);
var uri = new Uri("https://mystorageaccount.blob.core.windows.net/mycontainer/inbound/myfile.csv");
var cloudBlockBlob = new CloudBlockBlob(uri, storageCredentials);
var memoryStream = new MemoryStream();
cloudBlockBlob.DownloadToStream(memoryStream); // Error here
memoryStream.Position = 0;
memoryStream.Close();
}
我还确保从命令行输入 az login 来切换以选择正确的订阅,并且在 Visual Studio 选项中选择了该帐户。
错误日志:
Microsoft.Azure.Storage.StorageException
H结果=0x80131500
Message=此请求无权使用此权限执行此操作。
来源=Microsoft.Azure.Storage.Common
堆栈跟踪:
在 Microsoft.Azure.Storage.Core.Executor.Executor.d__11.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter
1.获取结果()
在 Microsoft.Azure.Storage.Core.Executor.Executor.c__DisplayClass0_01.<ExecuteSync>b__0()
at Microsoft.Azure.Storage.Core.Util.CommonUtility.RunWithoutSynchronizationContext[T](Func
1 个动作运行)
在 Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand1 cmd, IRetryPolicy policy, OperationContext operationContext)
at Microsoft.Azure.Storage.Blob.CloudBlob.DownloadRangeToStream(Stream target, Nullable
1 个偏移量、Nullable`1 长度、AccessCondition accessCondition、BlobRequestOptions 选项、OperationContext (OperationContext)
在 Microsoft.Azure.Storage.Blob.CloudBlob.DownloadToStream(流目标、AccessCondition accessCondition、BlobRequestOptions 选项、OperationContext operationContext)
在 C:...\source\repos\BlobStorage\Program.cs 中的 BlobStorage.Program.d__2.MoveNext() 处:第 111 行
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
在 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 C:...\source\repos\BlobStorage\Program.cs 中的 BlobStorage.Program.d__0.MoveNext() 处:第 19 行
该异常最初是在此调用堆栈中引发的:
Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteAsync(Microsoft.Azure.Storage.Core.Executor.RESTCommand、Microsoft.Azure.Storage.RetryPolicies.IRetryPolicy、Microsoft.Azure.Storage.OperationContext、System.Threading.CancellationToken)
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
System.Runtime.CompilerServices.TaskAwaiter.GetResult()
Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteSync.AnonymousMethod__0()
Microsoft.Azure.Storage.Core.Util.CommonUtility.RunWithoutSynchronizationContext(System.Func)
Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteSync(Microsoft.Azure.Storage.Core.Executor.RESTCommand、Microsoft.Azure.Storage.RetryPolicies.IRetryPolicy、Microsoft.Azure.Storage.OperationContext)
Microsoft.Azure.Storage.Blob.CloudBlob.DownloadRangeToStream(System.IO.Stream,长?,长?,Microsoft.Azure.Storage.AccessCondition,Microsoft.Azure.Storage.Blob.BlobRequestOptions,Microsoft.Azure.Storage.OperationContext)
Microsoft.Azure.Storage.Blob.CloudBlob.DownloadToStream(System.IO.Stream、Microsoft.Azure.Storage.AccessCondition、Microsoft.Azure.Storage.Blob.BlobRequestOptions、Microsoft.Azure.Storage.OperationContext)
...
[调用堆栈被截断]