재우니의 블로그


ASP.NET MVC 에서 AWS 의 S3 에 파일을 다운로드 처리고자 할때, S3 는 URL 을 전달해 주기 때문에 이를 BYTE 나 Stream 으로 변환하여 변환받아 controller 에서 처리 할 수 있는데요. 간단하게 Copyto 함수로 복사하는 방법이 존재하며, 복사한 stream 에 postion 을 0 으로 갱신하는 부분이 제일 중요 합니다. 읽기 전용이기 때문에 copyto 할때 파일을 읽어 position 을 마지막 위치에 존재하므로 새로운 stream 객체에는 다시 읽을 수 있도록 0 부터 지정하는 것입니다.


public Stream DownloadS3Object(string awsBucketName, string keyName)
{

    using (var client = Amazon.AWSClientFactory.CreateAmazonS3Client())
    {
        Stream imageStream = new MemoryStream();
        GetObjectRequest request = new GetObjectRequest { BucketName = awsBucketName, Key = keyName };
        using (GetObjectResponse response = client.GetObject(request))
        {
            response.ResponseStream.CopyTo(imageStream);
        }
        imageStream.Position = 0;
        // Clean up temporary file.
        // System.IO.File.Delete(dest);
        return imageStream;
    }
}


펌 : http://stackoverflow.com/a/20284702