2014-04-29 4 views
1

.gz 파일을 버켓에서로드하려고합니다. 연결 및 인증 작업 finde, 심지어 파일을 가져 오지만 문제는 파일이 훨씬 커야한다는 것입니다.Amazon S3 응답 스트림 저장

 public bool SaveBucketToFile(string Filename) 
    { 
     //Response check into file 
     using (StreamReader StRead = new StreamReader(_ObjResponse.ResponseStream)) 
     { 
      string TempFile = Path.GetTempFileName(); 

      StreamWriter StWrite = new StreamWriter(TempFile, false); 

      StWrite.Write(StRead.ReadToEnd()); 

      StWrite.Close(); 
      StRead.Close(); 

      // Move to real destination 
      if (File.Exists(Filename)) 
      { 
       File.Delete(Filename); 
      } 
      File.Move(TempFile, Filename); 
     } 
     return true; 
    } 
_ObjResponse의 다운로드 및 작성을 통해 만들어

: 그것은 함수 코드이다 버킷 내에서 원래 크기, 1백55메가바이트하지만 내 하드 디스크에 올 때 그것에 대해 288메가바이트 여기

에 일어나서 SDK에서 AmazonS3 클라이언트 사용. 프록시를 사용하지만 프록시가없는 다른 시스템에서 동일한 코드를 사용하면 동일한 결과가 나타납니다.

여기에 어떤 힌트가 있습니까? 객체 요청은 간단하다 : 모든 사람이 우연히 어떤 도움을 기꺼이

  _ObjRequest = new GetObjectRequest 
             { 
              BucketName = BucketName, 
              Key = Key 
             }; 

...

답변

1

을 위해.

먼저 버퍼링 된 스트림을 통해 스트림을 memorystream에 저장해야했습니다.

코드는 다음과 같습니다

   MemoryStream MemStream = new MemoryStream(); 
      BufferedStream Stream2 = new BufferedStream(_ObjResponse.ResponseStream); 
      byte[] Buffer = new byte[0x2000]; 
      int Count; 
      while ((Count = Stream2.Read(Buffer, 0, Buffer.Length)) > 0) 
      { 
       MemStream.Write(Buffer, 0, Count); 
      } 
      // Pfad auslesen 
      string TempFile = Path.GetTempFileName(); 
      //Stream zum Tempfile öffnen 
      FileStream Newfile = new FileStream(TempFile,FileMode.Create); 

      //Stream wieder auf Position 0 ziehen 
      MemStream.Position = 0; 
      // in Tempdatei speichern 
      MemStream.CopyTo(Newfile); 
      Newfile.Close(); 
      // Endgültigen Speicherpunkt prüfen und Tempdatei dorthin schieben 
      if (File.Exists(Filename)) 
      { 
       File.Delete(Filename); 
      } 
      File.Move(TempFile, Filename); 

내가 여기 어딘가에 발견

"아마존 S3에서 파일 가져 오기" http://www.codeproject.com/Articles/186132/Beginning-with-Amazon-S 캡션 아래를