如何在C#中通过HTTP发送和接收大文件

时间:2013-07-04 19:49:35

标签: c# http getresponse

我正在开发HTTP服务器/客户端,我现在可以通过它发送小文件,例如.txt文件和其他易于阅读的文件,这些文件不需要太多内存。但是,当我想发送一个更大的文件说.exe或大.pdf我得到内存错误。这是因为在我尝试发送或接收文件之前,我必须指定byte []缓冲区的大小。有没有办法在从流中读取缓冲区时获取缓冲区的大小?

我想做这样的事情:

//Create the stream.
private Stream dataStream = response.GetResponseStream();

//read bytes from stream into buffer.
byte[] byteArray = new byte[Convert.ToInt32(dataStream.Length)];
dataStream.read(byteArray,0,byteArray.Length);

然而,当调用“dataStream.Length”时,它会抛出错误:

 ExceptionError: This stream does not support seek operations.

有人可以提供一些建议,告诉我如何从流中获取byte []的长度吗?

谢谢,

2 个答案:

答案 0 :(得分:2)

您可以使用CopyTo方法。

MemoryStream m = new MemoryStream();
dataStream.CopyTo(m);
byte[] byteArray = m.ToArray();

您也可以直接写入文件

var fs = File.Create("....");
dataStream.CopyTo(fs);

答案 1 :(得分:1)

网络层无法知道响应流的持续时间。

然而,服务器应该告诉你它有多长;查看Content-Length响应标题 如果那个标题丢失或不正确,那你就不走运了;你需要继续阅读,直到你的数据用完为止。