trying to upload "large" file with HttpWebRequest results in Request.Files.AllKeys.Length == 0 in web page
I have the code shown here, running in a C# Windows application.
This code will upload a file to a web page.
On the server, I have a simple ASP.NET web page that I wrote to get the uploaded file. The lines in the web page that get the file are:
This setting should allow files up to 100 MB to be uploaded.
When I upload a file that is 670 KB, it works fine.
But when I upload a file that is 20 MB, on the server, Request.Files.AllKeys[0].Length is 0, meaning that no files were uploaded.
There are no errors and no indication of what is wrong.
One more thing - the ASP.NET web page has a FileUpload control so I can test the web page from a browser. Using FireFox, I can upload the 20 MB file just fine. So the problem must be in the Windows application that is sending the file.
Any ideas how to fix this?
Thanks.
// construct the command urlstring url = "http://mysite.com/myPage.aspx";// get a unique string to use for the data boundarystring dataBoundary = Guid.NewGuid().ToString();// get info about the file and open it for readingFileInfo fileInfo = new FileInfo( filePath );FileStream fs = new FileStream( filePath, FileMode.Open, FileAccess.Read );HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create( url );webRequest.UserAgent = "mkfUpload";webRequest.ContentType = "multipart/form-data; boundary=" + dataBoundary;webRequest.Method = "POST";webRequest.KeepAlive = true;string headerStr = String.Format( "--{0}\r\n" + "Content-Disposition: form-data; name=\"File1\"; filename=\"{1}\"\r\n" + "Content-Type: application/octet-stream\r\n" + "\r\n", dataBoundary, fileInfo.Name );byte[] headerBytes = Encoding.Default.GetBytes( headerStr );string trailerStr = String.Format( "--{0}--\r\n", dataBoundary );byte[] trailerBytes = Encoding.Default.GetBytes( trailerStr );webRequest.ContentLength = headerBytes.Length + trailerBytes.Length + fileInfo.Length;Stream webStream = webRequest.GetRequestStream();// write the header to the web streamwebStream.Write( headerBytes, 0, headerBytes.Length );// write the file to the streamint size;byte[] buf = new byte[1024 * 10];do { size = fs.Read( buf, 0, buf.Length ); if( size > 0 ) webStream.Write( buf, 0, size );} while( size > 0 );// write the trailer to the streamwebStream.Write( trailerBytes, 0, trailerBytes.Length );webStream.Close();fs.Close();