我是Azure的新手,我想为blob项(word文件)生成SAS访问令牌,包括阅读和写入此文件。
我的设想是:用户应该提交他们的数据,然后我应该接收这个数据作为一个字符串数组,并把它放入一个存储在Azure blob存储中的形式。
我已经实现了用用户数据更新表单的方法,因为我有一段代码来生成访问令牌,还有一段代码来读写文件,但是这对我来说不起作用!
这是我的代码:
async static Task<Uri> GetUserDelegationSasBlob(BlobClient blobClient)
{
BlobServiceClient blobServiceClient =
blobClient.GetParentBlobContainerClient().GetParentBlobServiceClient();
// Get a user delegation key
Azure.Storage.Blobs.Models.UserDelegationKey userDelegationKey =
await blobServiceClient.GetUserDelegationKeyAsync(DateTimeOffset.UtcNow,
DateTimeOffset.UtcNow.AddDays(7));
// Create a SAS token
BlobSasBuilder sasBuilder = new BlobSasBuilder()
{
BlobContainerName = blobClient.BlobContainerName,
BlobName = blobClient.Name,
Resource = "b",
StartsOn = DateTimeOffset.UtcNow,
ExpiresOn = DateTimeOffset.UtcNow.AddDays(7)
};
// Specify read and write permissions for the SAS.
sasBuilder.SetPermissions(BlobSasPermissions.Read | BlobSasPermissions.Write);
// Add the SAS token to the blob URI.
BlobUriBuilder blobUriBuilder = new BlobUriBuilder(blobClient.Uri)
{
// Specify the user delegation key.
Sas = sasBuilder.ToSasQueryParameters(userDelegationKey,
blobServiceClient.AccountName)
};
Console.WriteLine("Blob user delegation SAS URI: {0}", blobUriBuilder);
Console.WriteLine();
return blobUriBuilder.ToUri();
}
static async Task ReadBlobWithSasAsync(Uri sasUri)
{
//Read file content
public static void Run(Stream myBlob, string fileContent)
{
StreamReader contentReader = new StreamReader(myBlob);
string sampleContent = contentReader.ReadToEnd();
char[] spearator = { ' ' };
string[] content = sampleContent.Split(spearator);
reader.FillForm(content);
}
// Create a blob client object for blob operations.
BlobClient blobClient = new BlobClient(sasUri, null);
// Download and read the contents of the blob.
try
{
Console.WriteLine("Blob contents:");
// Download blob contents to a stream and read the stream.
BlobDownloadInfo blobDownloadInfo = await blobClient.DownloadAsync();
using (StreamReader reader = new StreamReader(blobDownloadInfo.Content, true))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
Console.WriteLine();
Console.WriteLine("Read operation succeeded for SAS {0}", sasUri);
Console.WriteLine();
}
catch (RequestFailedException e)
{
// Check for a 403 (Forbidden) error. If the SAS is invalid,
// Azure Storage returns this error.
if (e.Status == 403)
{
Console.WriteLine("Read operation failed for SAS {0}", sasUri);
Console.WriteLine("Additional error information: " + e.Message);
Console.WriteLine();
}
else
{
Console.WriteLine(e.Message);
Console.ReadLine();
throw;
}
}
}
1条答案
按热度按时间zfycwa2u1#
我在自己的环境中尝试,得到了以下结果:
我想为blob项(word文件)生成SAS访问令牌,包括阅读和写入此文件。
您可以使用以下代码生成SAS令牌并从azure blob存储读取内容:
代码:
输出:
参考:Use .NET to create a user delegation SAS for a container, directory, or blob - Azure Storage | Microsoft Learn