开发者

FileUpload using HttpWebRequest returns (411) Length Required Error

I have written an ActiveX control which supports drag-drop of email attachments and disk files and uploads files to a web server. I used the samples available at this link for Uploading files

Upload files with HTTPWebrequest (multipart/form-data)

I am sending data in chunks by setting the foll开发者_开发知识库owing properties

            wr = (HttpWebRequest)WebRequest.Create(UploadUrl);
            wr.ContentType = "multipart/form-data; boundary=" + boundary;
            wr.Method = "POST";
            wr.ContentLength = contentLength;
            wr.AllowWriteStreamBuffering = false;
            wr.Timeout = 600000;
            wr.KeepAlive = false;
            wr.ReadWriteTimeout = 600000;
            wr.ProtocolVersion = HttpVersion.Version10;
            wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
            wr.SendChunked = true;
            wr.UserAgent = "Mozilla/3.0 (compatible; My Browser/1.0)";
            rs = wr.GetRequestStream();

With the above settings I am getting an error (411) Length Required.

After reading the following article I realized, I dont need to set Content-Length property when I set SendChunked = true;

http://en.wikipedia.org/wiki/Chunked_transfer_encoding

But the Microsoft example code here doesn't do so

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.sendchunked.aspx

After further digging I came to know that Chunked encoding is supported in HTTP version 1.1 only. So I changed the property as follows wr.ProtocolVersion = HttpVersion.Version11;

Now I don't see that 411 error any more.

Now, can someone with better knowledge verify my understanding here and please let me know if I am doing right.

Thanks Ravi.


They are both just mechanisms to let the receiver know when it has reached the end of the transfer. If you want to use Content-Length, it is pretty simple. Just take your encoded byte array of POST data, and use the Length property.

ASCIIEncoding encoding = new ASCIIEncoding ();
byte[] postDataByteArray = encoding.GetBytes (postData); 
wr.ContentLength = postDataByteArray.Length;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜