Note that there are some explanatory texts on larger screens.

plurals
  1. POStream file from client to webrequest
    text
    copied!<p>I'm working on a file upload from a c# web app, going from the client machine to a remote cloud host. The user types in the file name and location and passes that to the server. I am streaming the contents of the file in chunks to the request. However, the file is not valid when it gets to the destination. I'm sure it's somehow related to my request headers and junk like that, since I'm able to make this work when uploading from the server to the remote location. Can anyone spot what's wrong?</p> <pre><code>while (bytesRemaining &gt; 0) { if (!sw.CanRead) { sw = File.OpenRead(txtFileUpload.Text); if (offset &gt; 0) sw.Seek(offset, SeekOrigin.Begin); } int count = sw.Read(buffer, 0, (int) chunk); request = (HttpWebRequest) WebRequest.Create("http://xxxxxx.com/write/" + offset); request.Method = "POST"; request.ReadWriteTimeout = int.MaxValue; request.Timeout = int.MaxValue; request.KeepAlive = false; string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x"); request.ContentType = "multipart/form-data; boundary=" + boundary; var postData = new MemoryStream(); const string newLine = "\r\n"; var sw3 = new StreamWriter(postData); sw3.Write("--" + boundary + newLine); sw3.Write("Content-Disposition: form-data;name=\"{0}\";filename=\"{1}\"{2}", "upload", txtFileName.Text, newLine); sw3.Write("Content-Type: multipart/form-data " + newLine + newLine); sw3.Flush(); postData.Write(buffer, 0, count); sw3.Write(newLine); sw3.Write("--{0}--{1}", boundary, newLine); sw3.Flush(); request.ContentLength = postData.Length; using (Stream s = request.GetRequestStream()) postData.WriteTo(s); sw3.Write("--" + boundary + newLine); sw3.Write("Content-Disposition: form-data;name=\"\"" + newLine); sw3.Write("content-type:octet-stream;charset=windows-1250" + newLine); sw3.Write("VALUE" + newLine); sw3.Write("--{0}--{1}", boundary, newLine); sw3.Flush(); postData.Close(); // These next 3 lines are what I had before, instead of all the previous // code, which worked when uploading a file from the server to the remote // location. //using (Stream sw2 = request.GetRequestStream()) //{ // sw2.Write(buffer, 0, count); //} using (WebResponse resp = request.GetResponse()) { resp.Close(); } offset += count; bytesRemaining -= count; } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload