2017-12-13 2 views
0

일부 파일을 저장하려면 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); 
     } 
    } 
} 

답변

0

확인 "대답"입니다입니다.

실제 자격 증명 대신 SharedAccessAccountPolicy로 설정된 CloudStorageAccount를 사용하는 경우 CloudStorageAccount는 스토리지 계정 관리 자체에만 사용할 수 있습니다.

예를 들어 Blob 컨테이너를 만들 수 있지만 적절하게 생성 된 SharedAccessBlobPolicy 또는 실제 자격 증명이 필요하기 때문에 해당 컨테이너에 대한 사용 권한을 설정할 수 없습니다.

 var storageAccount = GetStorageAccount(); 

     var blobClient = storageAccount.CreateCloudBlobClient(); 
:

지금까지 내 대답은 내가 시작시 다음 코드와 끝나는 SharedAccessAccountPolicy을 사용하도록 설정 한 모든 물건을 던져하는 것입니다

관련 문제