일부 파일을 저장하려면 Azure Blob 저장소를 사용하고 싶습니다..Net Core App에서 Azure Blob 저장소로 작업 할 수 없습니다.
제출 날짜가있는 각 파일에 대해 컨테이너 작성에도 사용하고 싶습니다. 따라서 제출 날짜별로 파일을 구성 할 수 있습니다.
블롭 저장소에 액세스하여 컨테이너를 만들 수 있습니다.
그러나 컨테이너에 대한 사용 권한을 설정하고 특정 Blob이 있는지 테스트하거나 Blob을 컨테이너에 추가 할 수 없습니다.
무엇이 누락 되었습니까?
나는 모든 경우에 점점 해요의 InnerException은 다음과 같습니다
분명히{Microsoft.WindowsAzure.Storage.StorageException :이 요청은이 작업을 수행 할 권한이 없습니다.
Microsoft.WindowsAzure.Storage.Core.Executor.Executor < ExecuteAsyncInternal> d__4`1.MoveNext()
--- 예외가 발생 된 이전 위치에서 스택 추적의 끝 --- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw에서
()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (작업 작업) Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer에서에서
. <> c__ 디스플레이 클래스 64_0. < < SetPermissionsAsync> b__0> d.MoveNext()
요청 정보
RequestID가 : XXXXXX
RequestDate : XXXXXX
상태 메시지는이 요청이이 동작을 수행하도록 허가되지 않는다.
ErrorCode가 : AuthorizationFailure
ErrorMessage가이 요청이이 동작을 수행하도록 허가되지 않는다.
RequestID가 : XXXXXX
시간 : XXXXXX
}
그것이 말하는대로 AuthorizationFailure
. 하지만 BLOB 저장소에 액세스하여 컨테이너를 만들 수 있습니다. 그래서 무엇을 제공합니까?여기에 전체 닷넷 코어 2 테스트 프로그램 (마이너스 조금 편집) 그래서 여기에
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;
using System;
namespace AzureStorageTestApp
{
public class Program
{
public static void Main(string[] args)
{
var storageAccount = GetStorageAccount();
var policy = new SharedAccessAccountPolicy()
{
Permissions = SharedAccessAccountPermissions.Read | SharedAccessAccountPermissions.Write | SharedAccessAccountPermissions.List,
Services = SharedAccessAccountServices.Blob | SharedAccessAccountServices.File,
ResourceTypes = SharedAccessAccountResourceTypes.Service | SharedAccessAccountResourceTypes.Container,
SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-15),
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
Protocols = SharedAccessProtocol.HttpsOnly
};
var sasToken = storageAccount.GetSharedAccessSignature(policy);
var creds = new StorageCredentials(sasToken);
var accountWithSAS = new CloudStorageAccount(creds, storageAccount.Credentials.AccountName, null, true);
var blobClient = accountWithSAS.CreateCloudBlobClient();
var containerName = DateTime.UtcNow.ToString("yyyy-MM-dd");
var container = blobClient.GetContainerReference(containerName);
if (container.CreateIfNotExistsAsync().Result)
{
var perms = new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Blob
};
// Blows up here
container.SetPermissionsAsync(perms).Wait();
}
var fileName = "testfile.txt";
var fileData = "some file data";
var blob = container.GetBlockBlobReference(fileName);
bool shouldUpload = true;
// Blows up here
var blobExists = blob.ExistsAsync().Result;
if (blobExists)
{
blob.FetchAttributesAsync().Wait();
if (blob.Properties.Length == fileData.Length)
{
shouldUpload = false;
}
}
if (shouldUpload)
{
// Blows up here
blob.UploadTextAsync(fileData).Wait();
}
}
private static CloudStorageAccount GetStorageAccount()
{
var connectionString = "DefaultEndpointsProtocol=https;AccountName=<Redacted>;AccountKey=<Redacted>;EndpointSuffix=core.windows.net";
return CloudStorageAccount.Parse(connectionString);
}
}
}