Well, after many games, I realized:
private void UploadFile(string url, CustomPostDataInfo pdi)
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequestCreator.ClientHttp.Create(new Uri(url));
webRequest.AllowWriteStreamBuffering = false;
webRequest.Method = "POST";
webRequest.ContentType = "multipart/form-data; boundary=" + pdi.Boundary;
webRequest.ContentLength = pdi.FormDataHeader.Length + pdi.File2Upload.Length + pdi.FormDataFooter.Length;
pdi.request = webRequest;
webRequest.BeginGetRequestStream(new AsyncCallback(WriteToStreamCallback), pdi);
}
private void WriteToStreamCallback(IAsyncResult asynchronousResult)
{
CustomPostDataInfo pdi = (AmazonS3PostDataInfo)asynchronousResult.AsyncState;
HttpWebRequest webRequest = pdi.request;
Stream requestStream = webRequest.EndGetRequestStream(asynchronousResult);
UTF8Encoding encoding = new UTF8Encoding();
UpdateShowProgress(false, "Uploading file...");
{
byte[] buffer = new Byte[1024 * 32];
Stream fileStream = pdi.File2Upload.OpenRead();
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
requestStream.Write(buffer, 0, bytesRead);
requestStream.Flush();
bytesUploaded += bytesRead;
UpdateShowProgress(false, "Uploading file...");
}
}
UpdateShowProgress(false, "Uploaded, waiting for response...");
requestStream.Close();
webRequest.BeginGetResponse(new AsyncCallback(ReadHttpResponseCallback), webRequest);
}
private void ReadHttpResponseCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse webResponse = (HttpWebResponse)webRequest.EndGetResponse(asynchronousResult);
StreamReader reader = new StreamReader(webResponse.GetResponseStream());
string response = reader.ReadToEnd();
reader.Close();
UpdateShowProgress(true, response);
}
source
share