public static string CreateHttpUploadFile(string url, Stream postedStream, string fileName, string cType, Dictionary<string, string> formDataDic)
{
if (string.IsNullOrEmpty(url))
throw new Exception("Upload Web URL Is Empty.");
String sReturnString = "";
//时间戳
string strBoundary = "----" + DateTime.Now.Ticks.ToString("x");
byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n");
//请求头部信息
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(strBoundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"");
sb.Append("file");
sb.Append("\"; filename=\"");
sb.Append(fileName);
sb.Append("\"");
sb.Append("\r\n");
sb.Append("Content-Type: ");
sb.Append(cType);
sb.Append("\r\n");
sb.Append("\r\n");
string strPostHeader = sb.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
//Our method is post, otherwise the buffer (postvars) would be useless
webRequest.Method = WebRequestMethods.Http.Post;
// Proxy setting
WebProxy proxy = new WebProxy();
proxy.UseDefaultCredentials = true;
webRequest.Proxy = proxy;
//We use form contentType, for the postvars.
webRequest.ContentType = "multipart/form-data;boundary=" + strBoundary; ;
webRequest.ContentLength = postedStream.Length + postHeaderBytes.Length + boundaryBytes.Length;
webRequest.Timeout = 300000;
if (formDataDic != null)
{
foreach (string key in formDataDic.Keys)
{
webRequest.Headers.Add(key, formDataDic[key]);
}
}
byte[] fileByte = new byte[postedStream.Length];
postedStream.Read(fileByte, 0, fileByte.Length);
using (Stream requestStream = webRequest.GetRequestStream())
{
requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
requestStream.Write(fileByte, 0, fileByte.Length);
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
requestStream.Close();
}
try
{
WebResponse resp = webRequest.GetResponse();
Stream s = resp.GetResponseStream();
StreamReader sr = new StreamReader(s);
//读取服务器端返回的消息
sReturnString = sr.ReadLine();
resp.Close();
sr.Close();
sr.Dispose();
s.Close();
s.Dispose();
}
catch (WebException ex)
{
HttpWebResponse response = ex.Response as HttpWebResponse;
if (response != null)
{
throw new WebException(response.StatusDescription, ex);
}
throw ex;
}
catch (Exception exception)
{
throw exception;
}
return sReturnString;
}