httpwebrequest上传,AllowWriteStreamBuffering属性

Paul_CG 2011-10-08 04:07:45
测试代码:

private void Upload(string url, string path)
{
try
{
HttpWebRequest req;// = (HttpWebRequest)WebRequest.Create(url);

req = (HttpWebRequest)WebRequest.Create(url);

NetworkCredential cre = new NetworkCredential("Paul", "123456");
req.Credentials = cre;
//req.PreAuthenticate = true;


req.Method = "PUT";
req.AllowWriteStreamBuffering = false;
req.Timeout = 1000000;
req.KeepAlive = false;
req.SendChunked = true;

//req.AllowAutoRedirect = true;

FileStream rdr = new FileStream(path, FileMode.Open);

req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = rdr.Length;

Stream reqStream = req.GetRequestStream();

byte[] inData = new byte[4096];

progressBar1.Value = 0;
progressBar1.Maximum = (int)(rdr.Length / 1024);

int bytesRead = rdr.Read(inData, 0, inData.Length);
//rdr.Close();
int iCurrentSize = 0;
while (bytesRead > 0)
{
reqStream.Write(inData, 0, bytesRead);

//Application.DoEvents();

bytesRead = rdr.Read(inData, 0, inData.Length);
iCurrentSize += (bytesRead / 1024);
progressBar1.Value = iCurrentSize;

}

rdr.Close();

//reqStream.Flush();

reqStream.Close();

req.GetResponse();

MessageBox.Show("ok");
}
catch (Exception e)
{

MessageBox.Show(e.Message);
}
}

当我把AllowWriteStreamBuffering设置成true时,可以上传300MB左右的文件,但传再大的文件就会报内存溢出的错误,应该是当这个属性为true的时候会向内存里写,导致内存溢出。当把这个属性设置为false的时候,无论上传多大的文件都会返回“ This request requires buffering data to succeed”异常,这个问题改怎么解决???
...全文
306 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
InterRonaldo 2012-12-26
  • 打赏
  • 举报
回复
首先你要把AllowWriteStreamBuffering设为false后上传的话 还需要把SendChunked 设为true,支持分块上传。这样才能不出错。 不过貌似如果你想把AllowWriteStreamBuffering设成false的时候,需要上传服务器对于这种上传的支持的。因为以前我用这样的方式上传会出现必须有Length required之类的错误,指定的ContentLength也是一样的。 从更好的途径来讲,我觉得还是建议让进行分割小文件上传或者服务器支持的话分段同时上传,这样的效果可能更好些。希望能够帮到你!
Paul_CG 2011-10-10
  • 打赏
  • 举报
回复
~~(╯﹏╰)b,来个人吧!!
Paul_CG 2011-10-09
  • 打赏
  • 举报
回复
有没有人指点下。。。。

110,547

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧