测试代码: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”异常,这个问题改怎么解决???

解决方案 »

  1.   

    首先你要把AllowWriteStreamBuffering设为false后上传的话 还需要把SendChunked 设为true,支持分块上传。这样才能不出错。
    不过貌似如果你想把AllowWriteStreamBuffering设成false的时候,需要上传服务器对于这种上传的支持的。因为以前我用这样的方式上传会出现必须有Length required之类的错误,指定的ContentLength也是一样的。从更好的途径来讲,我觉得还是建议让进行分割小文件上传或者服务器支持的话分段同时上传,这样的效果可能更好些。希望能够帮到你!