使用HttpWebRequest POST图片等文件,带参数

【转】

代码如下:

复制代码
public   string  HttpUploadFile( string  url,  string  file,  string  paramName,  string  contentType, NameValueCollection nvc)
{
    
string  result  =   string .Empty;
    
string  boundary  =   " --------------------------- "   +  DateTime.Now.Ticks.ToString( " x " );
    
byte [] boundarybytes  =  System.Text.Encoding.ASCII.GetBytes( " \r\n-- "   +  boundary  +   " \r\n " );

    HttpWebRequest wr 
=  (HttpWebRequest)WebRequest.Create(url);
    wr.ContentType 
=   " multipart/form-data; boundary= "   +  boundary;
    wr.Method 
=   " POST " ;
    wr.KeepAlive 
=   true ;
    wr.Credentials 
=  System.Net.CredentialCache.DefaultCredentials;

    Stream rs 
=  wr.GetRequestStream();

    
string  formdataTemplate  =   " Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1} " ;
    
foreach  ( string  key  in  nvc.Keys)
    {
        rs.Write(boundarybytes, 
0 , boundarybytes.Length);
        
string  formitem  =   string .Format(formdataTemplate, key, nvc[key]);
        
byte [] formitembytes  =  System.Text.Encoding.UTF8.GetBytes(formitem);
        rs.Write(formitembytes, 
0 , formitembytes.Length);
    }
    rs.Write(boundarybytes, 
0 , boundarybytes.Length);

    
string  headerTemplate  =   " Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n " ;
    
string  header  =   string .Format(headerTemplate, paramName, file, contentType);
    
byte [] headerbytes  =  System.Text.Encoding.UTF8.GetBytes(header);
    rs.Write(headerbytes, 
0 , headerbytes.Length);

    FileStream fileStream 
=   new  FileStream(file, FileMode.Open, FileAccess.Read);
    
byte [] buffer  =   new   byte [ 4096 ];
    
int  bytesRead  =   0 ;
    
while  ((bytesRead  =  fileStream.Read(buffer,  0 , buffer.Length))  !=   0 )
    {
        rs.Write(buffer, 
0 , bytesRead);
    }
    fileStream.Close();

    
byte [] trailer  =  System.Text.Encoding.ASCII.GetBytes( " \r\n-- "   +  boundary  +   " --\r\n " );
    rs.Write(trailer, 
0 , trailer.Length);
    rs.Close();

    WebResponse wresp 
=   null ;
    
try
    {
        wresp 
=  wr.GetResponse();
        Stream stream2 
=  wresp.GetResponseStream();
        StreamReader reader2 
=   new  StreamReader(stream2);

        result 
=  reader2.ReadToEnd();
    }
    
catch  (Exception ex)
    {
        
if  (wresp  !=   null )
        {
            wresp.Close();
            wresp 
=   null ;
        }
    }
    
finally
    {
        wr 
=   null ;
    }

    
return  result;
}
复制代码

调用:

// 调用实例
NameValueCollection nvc  =   new  NameValueCollection();
nvc.Add(
" id " " TTR " );
nvc.Add(
" btn-submit-photo " " Upload " );
HttpUploadFile(
" http://your.server.com/upload "
@" C:\test\test.jpg " " file " " image/jpeg " , nvc);

 

参考:
http://stackoverflow.com/questions/566462/upload-files-with-httpwebrequest-multipart-form-data/1924810#1924810

转自:http://www.cnblogs.com/94cool/archive/2011/03/05/1971873.html

你可能感兴趣的:(使用HttpWebRequest POST图片等文件,带参数)