zoukankan      html  css  js  c++  java
  • C#模拟POST上传文件帮助类(支持https、http)

     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(" --" + strBoundary + "-- ");
                //请求头部信息
                StringBuilder sb = new StringBuilder();
                sb.Append("--");
                sb.Append(strBoundary);
                sb.Append(" ");
                sb.Append("Content-Disposition: form-data; name="importType"");
                sb.Append(" 1");
                sb.Append(" ");
                sb.Append("--");
                sb.Append(strBoundary);
                sb.Append(" ");
                sb.Append("Content-Disposition: form-data; name="file"; filename="1.xls"");
                sb.Append(" ");
                sb.Append("Content-Type: ");
                sb.Append("application/octet-stream");
                sb.Append(" ");
                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;
            }

    特别注意:代码中包括“--”的地方不可以随意更改,否则踩坑。

  • 相关阅读:
    沙盒解决方案与场解决方案之间的差异
    Windows 7:77 个 Windows 7 提示
    SharePoint disable loopback check
    SharePoint 2010 工作流解决方案:序言
    SharePoint 2010 查看“运行时错误”
    sharepoint 链接库链接在新窗口打开
    如何启用SharePoint 2010的代码块
    沙盒解决方案注意事项
    ie8.0 不能用document.all兼容IE7模式
    php导出数据到excel,防止身份证等数字字符格式变成科学计数的方法
  • 原文地址:https://www.cnblogs.com/JustinLau/p/12362794.html
Copyright © 2011-2022 走看看