Я почти просмотрел все ответы SO, связанные с этим и другими форумами, но я до сих пор не могу понять реальную проблему. Это консольное приложение, которое будет развернуто в локальной среде и будет отправлять файлы в большой двоичный объект Azure.
Я использую WindowsAzure.Storage 9.3.3 с приведенным ниже кодом.
static void CreateBlob(string accountName, string containerName, string blobName, string accessToken)
{
var tokenCredential = new TokenCredential(accessToken);
var storageCredentials = new StorageCredentials(tokenCredential);
var storageAccount = new CloudStorageAccount(storageCredentials, accountName, string.Empty, useHttps: true);
var cloudBlobClient = storageAccount.CreateCloudBlobClient();
var cloudBlobContainer = cloudBlobClient.GetContainerReference(containerName);
CloudBlockBlob blockBlob = cloudBlobContainer.GetBlockBlobReference(blobName);
string blobContents = "Blob created by Azure AD authenticated user.";
byte[] byteArray = Encoding.ASCII.GetBytes(blobContents);
try
{
using (MemoryStream stream = new MemoryStream(byteArray))
{
blockBlob.UploadFromStreamAsync(stream).Wait();
}
Console.WriteLine("upload successful");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
}
И чтобы получить токен, как показано ниже.
public static string GetOAuthToken(string activeDirectoryTenantId, string
activeDirectoryApplicationSecret, string activeDirectoryApplicationId)
{
string resourceId = $"https://storage.azure.com";
var authority = String.Format("https://login.windows.net/" + activeDirectoryTenantId);
var credential = new ClientCredential(activeDirectoryApplicationId, activeDirectoryApplicationSecret);
var context = new AuthenticationContext(authority);
var result = context.AcquireTokenAsync(resourceId, credential).Result;
return result.AccessToken;
}
Может ли кто-нибудь предложить, что мне может не хватать?
P/S Я уже подтвердил, что моя локальная система синхронизирована с правильным временем UTC.
Я попытался использовать код в вашей проблеме, он успешно загрузил большой двоичный объект.
Примечание:
Storage Blob Data Contributor
роль приложениюПерейдите к учетной записи хранения -> Контроль доступа (IAM) -> Добавить назначение ролей.
Да, для меня не хватало второго шага. Спасибо