コード例 #1
0
        public static string Upload( string url, UploadFile[] files, NameValueCollection form )
        {
            HttpWebResponse resp = Upload( (HttpWebRequest)WebRequest.Create( url ), files, form );

            using( Stream s = resp.GetResponseStream() )
            using( StreamReader sr = new StreamReader( s ) ) {
                return sr.ReadToEnd();
            }
        }
コード例 #2
0
        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;
            }
        }