2014-05-22 6 views
0

SAS와 BLOB를 다운로드하려고합니다.Azure SAS 다운로드 BLOB

보기에 속한 모든 사용자 blob을 나열하고 있습니다. 사용자가 blob을 클릭하면 다운로드가 시작됩니다. 여기

@foreach (var file in Model) 
{ 
     <a href='@Url.Action("GetSaSForBlob", "Folder", new { blob = file })> 
     </a> 
} 

"폴더"컨트롤러에있는 내 두 가지 기능이 있습니다 : 여기

뷰입니다. 난 내보기 GetSasForBlob하기에서

public void GetSaSForBlob(CloudBlockBlob blob) 
{ 
    var sas = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy() 
    { 
     SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5), 
     SharedAccessExpiryTime = DateTime.UtcNow.AddHours(3), 
     Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write, 
    }); 

    DownloadFileTest(string.Format(CultureInfo.InvariantCulture, "{0}{1}", blob.Uri, sas)); 

    //return string.Format(CultureInfo.InvariantCulture, "{0}{1}", blob.Uri, sas); 
} 

static void DownloadFileTest(string blobSasUri) 
{ 
    CloudBlockBlob blob = new CloudBlockBlob(new Uri(blobSasUri)); 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     blob.DownloadToStream(ms); 
     byte[] data = new byte[ms.Length]; 
     ms.Position = 0; 
     ms.Read(data, 0, data.Length); 
    } 
} 
  1. 을 통과해야한다 무엇? 현재 CloudBlockBlob BLOB는 null입니다.

  2. DownloadFileTest 함수에서 코드가 누락 되었습니까?

  3. GetSasForBlob에서 직접 DownloadFileTest를 호출해야합니까?

  4. 사람들이보기 외부에서 액세스하지 못하게하려면 어떻게이 두 기능을 보호 할 수 있습니까? 둘 다 정적 함수입니다. 나는 그것이 안전하지 않다고 생각하고 있나?

답변

0

1 귀하의보기에서 귀하의 file 값은 얼마입니까? MVC가 제공 한 파일을 기반으로 CloudBlockBlob 개체를 만들 수 있다고 생각하지 않습니다. 따라서 이것이 CloudBlockBlobnull 인 이유 일 수 있습니다.

2 귀하의 DownloadFileTest에서 서버의 메모리 스트림에 BLOB의 바이너리를 다운로드하면됩니다. 사용자가 로컬 디스크에 다운로드하도록 허용하려면 바이너리를 Response.Stream에 넣어야합니다. blob.DownloadToStram(Response.Stream)과 같은 것을 사용할 수 있습니다.

3 그건 귀하에게 달려 있습니다. 원하는 경우 같은 방법으로 병합 할 수 있습니다.

4 웹 프론트 (웹 사이트 또는 웹 서비스)를 통해 blob을 다운로드하려면 blob 컨테이너를 private으로 설정하고 무언가를 사용하여 웹 사이트 또는 웹 서비스를 보호해야합니다 loke [Authorize] 특성입니다. 기본적으로 모든 경우에 SAS를 사용하지 않아도됩니다. 모든 다운로드 요청은 웹 프론트를 통해 수행되기 때문입니다.

희망이 조금 도움이됩니다.

+0

null 문제는 해결되었지만 다운로드 스트림의 작동 방식을 이해하지 못했습니다 .. Ive added : blob.DownloadToStream (Response.Stream); Response : Non static 필드, 메서드 또는 속성에 대해 개체 참조가 필요합니다. System.web.mvc.controller.response.get 현재이 코드 라인이 없으면 sasuri가 새 페이지로 나타나고 비어 있습니다 . 페이지를 변경하지 않고 파일을 다운로드하고 싶습니다. 어떻게 작동 할 때 실제로 작동합니까? – Reft

+0

페이지를 변경하지 않고 blob을 다운로드하려면 SAS 토큰을 만들 때 내용 처리 헤더를 추가하고 (다른 질문에 게시 한 코드 샘플 참조) GetSaSForBlob 메소드에서 RedirectToAction (sasUrl)을 수행하십시오. 'DownloadFileTest' 메소드가 필요 없습니다. HTH. –

+0

안녕하세요. 여기 내 "최종"코드를 볼 수 있습니다 : http : // stackoverflow.com/questions/23825246/azure-download-blob-sas-confirm-please 끔찍한 하하면 코멘트 해주세요 – Reft

관련 문제