我正在尝试从存储桶中加载.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
};
很高兴得到任何帮助......
答案 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获取文件"