编写上传类:UpLoad
public class UpLoad { //存储上传对象 public struct PostFile { public string name; public string filename; public Stream bitmapStream; } private HttpWebRequest webRequest; private HttpWebResponse webResponse; public JObject PostStringFormPic(Dictionary<string, string> paramData,string url,PostFile postfile, Encoding EncodingPostData = null, Encoding EncodingReadStream = null) { webRequest= (HttpWebRequest)WebRequest.Create(url); webRequest.Method = "POST"; //string ret = string.Empty; Stream newStream = null; //StreamReader sr = null; if (EncodingReadStream == null) { EncodingReadStream = Encoding.UTF8; } if (EncodingPostData == null) { EncodingPostData = Encoding.UTF8; } try { // 边界符 var boundary = "---------------" + DateTime.Now.Ticks.ToString("x"); // 边界符 var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); // 最后的结束符 var endBoundary = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); webRequest.ContentType = "multipart/form-data; boundary=" + boundary; var memStream = new MemoryStream(); memStream.Write(beginBoundary, 0, beginBoundary.Length); var header = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type: image/jpeg\r\n\r\n"; header = string.Format(header, postfile.name, postfile.filename); var headerbytes = EncodingPostData.GetBytes(header); memStream.Write(headerbytes, 0, headerbytes.Length); //将流的初始点设置为0否则将无法正确读取流信息 postfile.bitmapStream.Position = 0; postfile.bitmapStream.CopyTo(memStream); var stringKeyHeader = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"" + "\r\n\r\n{1}"; foreach (var item in paramData) { string data = string.Format(stringKeyHeader, item.Key, item.Value); byte[] bdata = EncodingPostData.GetBytes(data); memStream.Write(bdata, 0, bdata.Length); } // 写入最后的结束边界符 memStream.Write(endBoundary, 0, endBoundary.Length); webRequest.ContentLength = memStream.Length; ServicePointManager.Expect100Continue = false; newStream = webRequest.GetRequestStream(); memStream.Position = 0; var tempBuffer = new byte[memStream.Length]; memStream.Read(tempBuffer, 0, tempBuffer.Length); memStream.Close(); newStream.Write(tempBuffer, 0, tempBuffer.Length);//写入参数 newStream.Close(); string result = string.Empty; webResponse = (HttpWebResponse)webRequest.GetResponse(); using (System.IO.Stream stream = webResponse.GetResponseStream()) { using (System.IO.StreamReader sr = new System.IO.StreamReader(stream, EncodingReadStream)) { result = sr.ReadToEnd(); } } return JObject.Parse(result); } catch (Exception) { return null; } }上传部分代码:
/// <summary> /// 图片上传方法 /// </summary> /// <param name="file">文件路径</param> /// <param name="url">提交地址</param> /// <returns></returns> private JObject UpLoad_Img(string file, string url) { UpLoad.PostFile img = new UpLoad.PostFile(); img.name = "file"; img.filename = file; Bitmap bmp = new Bitmap(file); MemoryStream ms = new MemoryStream(); bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] arr = new byte[ms.Length]; ms.Position = 0; ms.Read(arr, 0, (int)ms.Length); img.bitmapStream = ms; //调用接口 UpLoad http = new UpLoad(); Dictionary<string, string> keys = new Dictionary<string, string>(); keys.Add("access_token", ConfigHelper.Get("token")); JObject res = http.PostStringFormPic(keys, ConfigHelper.Get("api_url") + "/" + url, img); ms.Close(); return res; }