2014-01-28 2 views
3

amazon s3에서 파일을 스트리밍하는 중에 문제가 있습니다. 기본적으로 amazom s3에 파일이 저장되어있어 사용자 인증이 필요할 때이 파일에 직접 액세스 할 수는 없습니다. 아마존에서 내 서버로, 그리고 내 서버에서 최종 클라이언트로 각 파일을 다운로드하지 않고 파일을 스트리밍하는 방법을 찾으려고합니다. 방금 파일을 직접 스트리밍 할 수 있기를 원하지만 .NET에서 스트림 리더 클래스의 대부분은이 작업을 수행하는 데 사용되는 케이블이 아닌 것 같습니다. 내가 틀렸다면 나를 바로 잡아주세요.amazon s3의 파일 스트리밍

+0

당신은 저장되는 파일이 응용 프로그램 내 보안의 요소가 필요한지 여부를 명확히 할 수 있습니다. .net에서 Amazon S3 SDK를 사용하여 공개 (공유 가능) URL을 생성 할 수 있다는 것을 알고 있습니다. 생성하려는 링크를 생성 할 수있는 만료 시간을 설정하려면 다음을 생성하십시오. http : // docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURLDotNetSDK.html – JLo

답변

6

파일을 서버에 다운로드하지 않고 Amazon S3에서 클라이언트로 스트림을 전송할 수 있습니다. Amazon S3 파일로 스트림을 열고 클라이언트 스트림에서 읽을 수 있습니다 (버퍼로 버퍼링). .

샘플 코드 :

byte[] buffer = new byte[BUFFER_SIZE];     
GetObjectRequest getObjRequest = new GetObjectRequest().WithBucketName(Bucket_Name).WithKey(Object_Key); 

using (GetObjectResponse getObjRespone = amazonS3Client.GetObject(getObjRequest)) 
using (Stream amazonStream = getObjRespone.ResponseStream) 
{ 
    int bytesReaded = 0;   
    Response.AddHeader("Content-Length", getObjRespone.ContentLength.ToString()); 

    while ((bytesReaded = amazonStream.Read(buffer, 0, buffer.Length)) > 0 && Response.IsClientConnected) 
    { 
     Response.OutputStream.Write(buffer, 0, bytesReaded); 
     Response.OutputStream.Flush(); 
     buffer = new byte[BUFFER_SIZE]; 
    } 
} 
+0

'Stream.CopyTo '에 무슨 문제가 있습니까? – Gusdor

+0

.Net 프레임 워크 4.0 이상을 사용하는 경우 Stream.CopyTo를 사용할 수 있습니다. 이전에 사용했는데 문제가 (파일 손상) 발생했지만 정확히 무엇이 문제인지는 확실하지 않지만 스트림 인코딩. –

관련 문제