Amazon S3保存响应流

时间:2014-04-29 14:47:31

标签: c# amazon-web-services amazon-s3

我正在尝试从存储桶中加载.gz文件。 连接和身份验证工作finde,我甚至得到一个文件,但问题是,文件应该比文件大得多。它的原始大小,桶内有155MB,但当它进入我的硬盘时,它可以达到大约288MB

这是功能代码:

        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的下载和填充是通过其SDK中使用AmazonS3客户端完成的。我正在使用代理,但是在没有代理的不同机器上使用相同的代码会带来相同的结果。

任何提示在这做什么?对象请求很简单:

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

很高兴得到任何帮助......

1 个答案:

答案 0 :(得分:1)

让所有人偶然发现这一点。

我需要先通过bufferedStream将流保存到内存流中。

代码如下所示:

                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);

我在这里找到了这个地方: 标题下的http://www.codeproject.com/Articles/186132/Beginning-with-Amazon-S"从Amazon S3获取文件"