public static HttpWebResponse Upload( HttpWebRequest req, UploadFile[] files, NameValueCollection form ) { List<MimePart> mimeParts = new List<MimePart>(); try { foreach( string key in form.AllKeys ) { StringMimePart part = new StringMimePart(); part.Headers[ "Content-Disposition" ] = "form-data; name=\"" + key + "\""; part.StringData = form[ key ]; mimeParts.Add( part ); } int nameIndex = 0; foreach( UploadFile file in files ) { StreamMimePart part = new StreamMimePart(); if( string.IsNullOrEmpty( file.FieldName ) ) file.FieldName = "file" + nameIndex++; part.Headers[ "Content-Disposition" ] = "form-data; name=\"" + file.FieldName + "\"; filename=\"" + file.FileName + "\""; part.Headers[ "Content-Type" ] = file.ContentType; part.SetStream( file.Data ); mimeParts.Add( part ); } string boundary = "----------" + DateTime.Now.Ticks.ToString( "x" ); req.ContentType = "multipart/form-data; boundary=" + boundary; req.Method = "POST"; long contentLength = 0; byte[] _footer = Encoding.UTF8.GetBytes( "--" + boundary + "--\r\n" ); foreach( MimePart part in mimeParts ) { contentLength += part.GenerateHeaderFooterData( boundary ); } req.ContentLength = contentLength + _footer.Length; byte[] buffer = new byte[ 8192 ]; byte[] afterFile = Encoding.UTF8.GetBytes( "\r\n" ); using( Stream s = req.GetRequestStream() ) { foreach( MimePart part in mimeParts ) { s.Write( part.Header, 0, part.Header.Length ); int read; while( (read = part.Data.Read( buffer, 0, buffer.Length )) > 0 ) s.Write( buffer, 0, read ); part.Data.Dispose(); s.Write( afterFile, 0, afterFile.Length ); } s.Write( _footer, 0, _footer.Length ); } return (HttpWebResponse)req.GetResponse(); } catch { foreach( MimePart part in mimeParts ) if( part.Data != null ) part.Data.Dispose(); throw; } }
public static HttpWebResponse Upload(HttpWebRequest req, UploadFile[] files, NameValueCollection form) { List <MimePart> mimeParts = new List <MimePart>(); try { foreach (string key in form.AllKeys) { StringMimePart part = new StringMimePart(); part.Headers["Content-Disposition"] = "form-data; name=\"" + key + "\""; part.StringData = form[key]; mimeParts.Add(part); } int nameIndex = 0; foreach (UploadFile file in files) { StreamMimePart part = new StreamMimePart(); if (string.IsNullOrEmpty(file.FieldName)) { file.FieldName = "file" + nameIndex++; } part.Headers["Content-Disposition"] = "form-data; name=\"" + file.FieldName + "\"; filename=\"" + file.FileName + "\""; part.Headers["Content-Type"] = file.ContentType; part.SetStream(file.Data); mimeParts.Add(part); } string boundary = "----------" + DateTime.Now.Ticks.ToString("x"); req.ContentType = "multipart/form-data; boundary=" + boundary; req.Method = "POST"; long contentLength = 0; byte[] _footer = Encoding.UTF8.GetBytes("--" + boundary + "--\r\n"); foreach (MimePart part in mimeParts) { contentLength += part.GenerateHeaderFooterData(boundary); } req.ContentLength = contentLength + _footer.Length; byte[] buffer = new byte[8192]; byte[] afterFile = Encoding.UTF8.GetBytes("\r\n"); using (Stream s = req.GetRequestStream()) { foreach (MimePart part in mimeParts) { s.Write(part.Header, 0, part.Header.Length); int read; while ((read = part.Data.Read(buffer, 0, buffer.Length)) > 0) { s.Write(buffer, 0, read); } part.Data.Dispose(); s.Write(afterFile, 0, afterFile.Length); } s.Write(_footer, 0, _footer.Length); } return((HttpWebResponse)req.GetResponse()); } catch { foreach (MimePart part in mimeParts) { if (part.Data != null) { part.Data.Dispose(); } } throw; } }