Problem hochladen. (Jetzt ist nicht wichtig, wie ich einen Upload-Fortschritt zeigen soll. Ich kann einfach einige Daten auf die Konsole ausgeben).Wie Daten durch Abschnitte über HttpWebRequest
-Code:
Stackoverlow hat viele solcher Fragen: link 1 etc. (Ich kann nicht mehr Links enthalten, weil ich keine ausreichenden Ruf haben).
using System;
using System.Text;
using System.IO;
using System.Net;
...
public static void UploadData()
{
const string data = "simple string";
byte[] buffer = new ASCIIEncoding().GetBytes(data);
// Thanks to http://www.posttestserver.com all is working from the box
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://posttestserver.com/post.php");
req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 " +
"(KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10";
req.Accept = "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
req.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3");
req.Headers.Add("Accept-Language", "en-US,en;q=0.8");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = buffer.Length;
req.SendChunked = true;
int bytesRead = buffer.Length;
const int chunkSize = 3;
Stream s = req.GetRequestStream();
for (int offset = 0; offset < bytesRead; offset += chunkSize)
{
int bytesLeft = bytesRead - offset;
int bytesWrite = bytesLeft > chunkSize ? chunkSize : bytesLeft;
s.Write(buffer, offset, bytesWrite);
}
s.Close(); // IMPORTANT: only here all data will be send
}
Bemerkungen:
Auch nach this link, jeweils das Senden während jedes Schreiben auf eine Anfrage Strom, aber in Wirklichkeit (es kann gezeigt werden, in Fiddler) alle Sendeoperationen treten nur auftreten müssen nach Anfrage Stream-Schließung oder nur durch Antwort bekommen und nicht früher. (alles hängt von den Parametern SendChuncked
, AllowWriteStreamBuffering
und ContentLength
ab, aber Daten werden niemals nach jedem Schreiben in einen Stream gesendet).
Frage:
Wie Daten (physisch) nach jedem gesendet werden schriftlich (jeden Aufruf der Write-Methode)?
Constraints:
Net 2.0;
Verwenden nur des HttpWebRequest-Grundelements (nicht WebClient).