测试代码: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”异常,这个问题改怎么解决???
{
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”异常,这个问题改怎么解决???
解决方案 »
- C# 如何获取一个类型实例对象的大小(所占用的字节大小)
- C#基础问题
- 新人请教configurationmanger.appsetting的相关问题
- Remoting 文件传输占用CPU存问题
- 获取Textbox中的字符但报错?(书上原例)谢谢!
- 添加了NotifyIcon的ICON属性之后,报错“未将对象引用设置到对象的实例”,为什么?
- php问题
- dev的gridview分组排序问题。
- 字符处理问题 谁能帮忙分解重组下啊 急需
- 请问,如何可以在程序中调用IE浏览器?
- 证书签名验证 SignedCms 怎么知道验证结果。求教。
- 一个线程处于sleep(10000)状态,怎么样让它跳出sleep()状态做别的事?
不过貌似如果你想把AllowWriteStreamBuffering设成false的时候,需要上传服务器对于这种上传的支持的。因为以前我用这样的方式上传会出现必须有Length required之类的错误,指定的ContentLength也是一样的。从更好的途径来讲,我觉得还是建议让进行分割小文件上传或者服务器支持的话分段同时上传,这样的效果可能更好些。希望能够帮到你!