使用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);

posted @ 2013-11-11 17:59  Byrd  阅读(1212)  评论(0编辑  收藏  举报