2016-06-05 4 views
0

로컬 VS (한 프로젝트는 2013, 다른 프로젝트는 2015)에서 작업 중입니다. BLOB 및 보안을 처음 접했으므로 선택해야했습니다. 클라이언트 브라우저에서 BLOB 저장소로 업로드했기 때문에 업로드 속도가 느린 다른 사람의 프로젝트를 업로드 한 다음 blob을 가져 와서 미디어 자산을 만들고 mp4로 해당 자산을 인코딩했습니다. 저는 미디어 자산의 인코딩과 생성을 백그라운드 프로세스에 넣으려고합니다.스토리지 계정에 BLOB를 열거하고 볼 수 있음

localhost를 실행하면 문제없이 업로드 및 저장할 수 있습니다. Azure 포털에서 얼룩을 볼 수 있으며 심지어 BLOB의 액세스 유형을 컨테이너로 설정했습니다. 하지만 배경 저장소에서 blob을 검색하려고하면 blob 핸들을 얻는 것처럼 보입니다. 그러나 blob.FetchAttributes()를 호출하려고하면 404가 표시됩니다. 올바른 저장소 연결을 사용하고 있습니다. 끈. URL에 SAS 토큰이 추가되었습니다 (1 년 유효). 토큰을 사용하거나 사용하지 않고 시도했습니다.

아래에 표시된이 빠른 콘솔 앱을 작성했습니다. 컨테이너의 blob이 열거 될 때 업로드 한 blob이 표시되고 올바른 크기가 표시됩니다. 그러나 blob.Exists()에 대한 호출은 매번 실패합니다. blob 참조를 얻기 위해 fileName var에 사용하고있는 수정 된 URL이 Azure 포털에서 직접 복사됩니다. 연결 문자열에 올바른 자격 증명이 있으므로 여기에서 무슨 일이 일어나고 있는지 확실하지 않습니다. 모든 설명은 크게 감사하겠습니다. 블롭 구조 평 계층 구조이므로 container.GetBlockBlobReference(fileName).Exists();

private static void ListBlobs() 
{ 
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
    var container= blobClient.GetContainerReference("streamingfiles"); 

    // Loop over items within the container and output the length and URI. 
    foreach (IListBlobItem item in container.ListBlobs(null, false)) 
    { 
     if (item.GetType() == typeof(CloudBlockBlob)) 
     { 
      CloudBlockBlob blob = (CloudBlockBlob)item; 
      Console.WriteLine("Block blob of length {0}: {1}", blob.Properties.Length, blob.Uri); 
     } 
    } 

    var fileName = "https://redacted.blob.core.windows.net/streamingfiles/47a49fb7-6f44-4f56-9695-37a4ddcd0f4a_56.mp4";//tried also with sas token 
    var sourceCloudBlob = container.GetBlockBlobReference(fileName); 

    if (sourceCloudBlob.Exists()) 
     Console.WriteLine("Exists"); 
    else 
     Console.WriteLine("Does Not Exist"); //alwayd doesn't exist 
} 

답변

0

대안 는 trueflatBlobListing 플래그를 설정한다.

// Loop over items within the container and output the length and URI. 
foreach (IListBlobItem item in container.ListBlobs(null, true)) 
{ 
    if (item.GetType() == typeof(CloudBlockBlob)) 
    { 
     CloudBlockBlob blob = (CloudBlockBlob)item; 

     if (blob != null) 
     { 
      blob.FetchAttributes(); 
      Console.WriteLine("Fetching Attributes"); 
      string blobFilePath = blob.Uri.AbsolutePath.ToString(); 

      if(String.compare(blobFilePath, filename, true) == 0) 
      { 
       Console.WriteLine("Exists"); 
      } 
      else 
      { 
       Console.WriteLine("Does Not Exist") 
      } 

      Console.WriteLine("Block blob of length {0}: {1}", blob.Properties.Length, blob.Uri); 
     } 
    } 
} 
0

나는 바보입니다. 이미 컨테이너에있을 때 파일의 전체 경로를 전달하는 지점은 무엇입니까? var fileName = "47a49fb7-6f44-4f56-9695-37a4ddcd0f4a_56.mp4";

Dev-One은 나를 멈추게하고 그것에 대해 생각하게 만들었지 만 나는 그걸 올바르게 표시 할 수 없습니다.

관련 문제