如何解决Azure 存储:使用具有创建权限的 SAS 时 AuthorizationPermissionMismatch
我以 1MB 的块为单位将大 Blob 上传到 Azure 存储。这在我创建具有 Write
权限的 SAS 时有效,但它会在具有 Create
权限的情况下引发以下错误。
ErrorCode: AuthorizationPermissionMismatch
This request is not authorized to perform this operation using this permission
这是预期的行为吗?我想将 SAS 令牌传递给用户,并允许他们创建一个 blob,但一旦创建就不会覆盖它。我怎样才能做到这一点?
解决方法
更新:
上传块 blob 时,需要写入权限。
这是文档:
https://docs.microsoft.com/en-us/rest/api/storageservices/create-account-sas#blob-service
原答案:
请确保您已授予创建权限:
下面是我的代码(C#),它工作正常(即使不存在 Blob 我也可以创建。):
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp28
{
class Program
{
static void Main(string[] args)
{
string containerName = "test";
string token = "?sv=2019-12-12&ss=bfqt&srt=sco&sp=rwdlacupx&se=2021-01-04T09:41:18Z&st=2021-01-04T01:41:18Z&spr=https&sig=UVhS9bPGqWhjKnlrQIMkWHD6Bdfdpym8vgZoQ6W9qDE%3D";
string sas_uri = "https://0730bowmanwindow.blob.core.windows.net/test?sv=2019-12-12&ss=bfqt&srt=sco&sp=rwdlacupx&se=2021-01-04T09:41:18Z&st=2021-01-04T01:41:18Z&spr=https&sig=UVhS9bPGqWhjKnlrQIMkWHD6Bdfdpym8vgZoQ6W9qDE%3D";
BlobServiceClient blobServiceClient = new BlobServiceClient(new Uri(sas_uri));
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
BlobClient blobClient = containerClient.GetBlobClient("20210104.txt");
byte[] byteArray = Encoding.UTF8.GetBytes("This is a test.20210104");
MemoryStream stream = new MemoryStream(byteArray);
blobClient.Upload(stream,true);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。