/// 使用Post方法上传文件 /// </summary> /// <param name="url"></param> /// <param name="files">需要上传的文件,Key:对应要上传的Name,Value:本地文件名</param> public void Upload(string url, Dictionary<string, string> files) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; Stream postStream = new MemoryStream(); var doUpload = files != null && files.Count > 0;//是否用Form if (doUpload) { //通过表单上传文件 string boundary = "----" + DateTime.Now.Ticks.ToString("x"); string formdataTemplate = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n"; foreach (var file in files) { try { var fileName = file.Value; using (var fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { var formdata = string.Format(formdataTemplate, file.Key, fileName /*Path.GetFileName(fileName)*/); var formdataBytes = Encoding.ASCII.GetBytes(postStream.Length == 0 ? formdata.Substring(2, formdata.Length - 2) : formdata);//第一行不需要换行 postStream.Write(formdataBytes, 0, formdataBytes.Length); byte[] buffer = new byte[1024]; int bytesRead = 0; while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) { postStream.Write(buffer, 0, bytesRead); } } } catch (Exception ex) { throw ex; } } //结尾 var footer = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); postStream.Write(footer, 0, footer.Length); request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary); } request.ContentLength = postStream != null ? postStream.Length : 0; request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; request.KeepAlive = true; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36"; if (postStream != null) { postStream.Position = 0; //直接写入流 Stream requestStream = request.GetRequestStream(); byte[] buffer = new byte[1024]; int bytesRead = 0; while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) != 0) { requestStream.Write(buffer, 0, bytesRead); } postStream.Close(); } HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (Stream responseStream = response.GetResponseStream()) { using (var fs = File.Create(@"d:\xx.png")) { int buffer_count = 65536; byte[] buffer2 = new byte[buffer_count]; int size = 0; while ((size = responseStream.Read(buffer2, 0, buffer_count)) > 0) { fs.Write(buffer2, 0, size); } fs.Flush(); } } }