Thanks very much, Steven!!!
That's exactly what I am looking for - one more thing, the code snippet
shows how to upload the file only, I need to know how to upload the file
PLUS post extra form field back, Could you please help me on that? Thanks a
lot!
Regards,
John
"Steven Cheng[MSFT]" <v-schang@online.microsoft.com> wrote in message
news:yY4aCtURFHA.2296@TK2MSFTNGXA02.phx.gbl...[color=blue]
> Thanks for your reply John,
>
> As for how to programmatically interact with the upload page in client
> .net
> application, have you had a chance to see the code in the article I
> provided or my attached demo? I'm sorry for my carelessness since I
> assumed that you'll have a look at those article or my demo. Anyway, here
> are some code snippet on using webclient or httpwebrequest to post file
> stream:
>
> #using WebClient
> string url = "http://myserver/myapp/upload.aspx";
> string file = "c:\\files\\test.jpg";
> WebClient wc = new WebClient();
> wc.UploadFile(url,"post",file);
>
> #using httpWebrequest:
>
>
> private void UploadFilesToRemoteUrl(string url, string[] files, string
> logpath)
> {
>
> long length = 0;
> string boundary = "----------------------------" +
> DateTime.Now.Ticks.ToString("x");
>
>
> HttpWebRequest httpWebRequest2 = (HttpWebRequest)WebRequest.Create(url);
> httpWebRequest2.ContentType = "multipart/form-data; boundary=" + boundary;
> httpWebRequest2.Method = "POST";
> httpWebRequest2.KeepAlive = true;
>
> httpWebRequest2.Credentials =
> System.Net.CredentialCache.DefaultCredentials;
>
> Stream memStream = new System.IO.MemoryStream();
>
> byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" +
> boundary + "\r\n");
>
>
> memStream.Write(boundarybytes,0,boundarybytes.Leng th);
> length += boundarybytes.Length;
>
> string headerTemplate = "Content-Disposition: form-data; name=\"{0}\";
> filename=\"{1}\"\r\n Content-Type: application/octet-stream\r\n\r\n";
>
> for(int i=0;i<files.Length;i++)
> {
>
> string header = string.Format(headerTemplate,"file"+i,files[i]);
>
> byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
>
> memStream.Write(headerbytes,0,headerbytes.Length);
> length += headerbytes.Length;
>
> FileStream fileStream = new FileStream(files[i], FileMode.Open,
> FileAccess.Read);
> byte[] buffer = new byte[1024];
>
> int bytesRead = 0;
>
> while ( (bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0 )
> {
> memStream.Write(buffer, 0, bytesRead);
> length += bytesRead;
> }
>
>
> memStream.Write(boundarybytes,0,boundarybytes.Leng th);
> length += boundarybytes.Length;
>
> fileStream.Close();
> }
>
> httpWebRequest2.ContentLength = memStream.Length;
>
> Stream requestStream = httpWebRequest2.GetRequestStream();
>
> memStream.Position = 0;
> byte[] tempBuffer = new byte[memStream.Length];
> memStream.Read(tempBuffer,0,tempBuffer.Length);
> memStream.Close();
> requestStream.Write(tempBuffer,0,tempBuffer.Length );
> requestStream.Close();
>
>
> WebResponse webResponse2 = httpWebRequest2.GetResponse();
>
> Stream stream2 = webResponse2.GetResponseStream();
> StreamReader reader2 = new StreamReader(stream2);
>
>
> MessageBox.Show(reader2.ReadToEnd());
>
> webResponse2.Close();
> httpWebRequest2 = null;
> webResponse2 = null;
>
> }
>
>
> As we can see, weclient has encapsulated the underlying details of using
> httpwebrequest to post data and the code will be very simple. However,
> using httpwebrequest directly will give us more control over the posted
> data stream as my above function inject multi file stream into the single
> HttP request message.
>
> Hope helps.
>
> Steven Cheng
> Microsoft Online Support
>
> Get Secure!
www.microsoft.com/security
> (This posting is provided "AS IS", with no warranties, and confers no
> rights.)
>
>[/color]