public static int PostFile(string getUrl, CookieContainer cookieContainer, HttpHeader header, string postdata, byte[] postdatabyte, Stream sm) { Stream fileStream; if (sm != null) { fileStream = sm; } else { fileStream = new MemoryStream(postdatabyte); } ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls;//https形式需要添加 int returnValue = 0; fileStream.Position = 0; var r = new BinaryReader(fileStream); 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=\"importType\""); sb.Append("\r\n\r\n1"); sb.Append("\r\n"); sb.Append("--"); sb.Append(strBoundary); sb.Append("\r\n"); sb.Append("Content-Disposition: form-data; name=\"file\"; filename=\"1.xls\""); sb.Append("\r\n"); sb.Append("Content-Type: "); sb.Append("application/octet-stream"); sb.Append("\r\n\r\n"); string strPostHeader = sb.ToString(); byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader); try { // 根据uri创建HttpWebRequest对象 HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(getUrl)); httpReq.Method = "POST"; //对发送的数据不使用缓存 httpReq.AllowWriteStreamBuffering = false; //设置获得响应的超时时间(300秒) httpReq.Timeout = 300000; //httpReq.ServicePoint.Expect100Continue = false; httpReq.CookieContainer = cookieContainer; httpReq.Accept = header.accept; //httpReq.Headers.Add("Accept-Encoding","gzip, deflate, br"); //httpReq.Headers.Add("TE", "Trailers"); httpReq.UserAgent = header.userAgent; httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary; long length = fileStream.Length + postHeaderBytes.Length + boundaryBytes.Length; long fileLength = fileStream.Length; httpReq.ContentLength = length; byte[] buffer = new byte[fileLength]; Stream postStream = httpReq.GetRequestStream(); //发送请求头部消息 postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); int size = r.Read(buffer, 0, buffer.Length); postStream.Write(buffer, 0, size); //添加尾部的时间戳 postStream.Write(boundaryBytes, 0, boundaryBytes.Length); postStream.Close(); //获取服务器端的响应 HttpWebResponse webRespon = (HttpWebResponse)httpReq.GetResponse(); if (webRespon.StatusCode == HttpStatusCode.OK) //如果服务器未响应,那么继续等待相应 { Stream s = webRespon.GetResponseStream(); StreamReader sr = new StreamReader(s); //读取服务器端返回的消息 String sReturnString = sr.ReadLine(); s.Close(); sr.Close(); fileStream.Close(); returnValue=returnValue; } } catch (Exception ex) { UnionLog.WriteLog(LogType.UNION_ERROR, string.Format("导入Excel失败:{0}", ex.Message)); } return returnValue; }
特别注意:代码中包括“--”的地方不可以随意更改,否则踩坑。
|