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;
            }

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

  • 相关阅读:
    高可用OpenStack(Queen版)集群-6.Nova控制节点集群
    UML建模相关工具一览
    Java 常用资源工具集合
    [开发工具]Java开发常用的在线工具
    Beyond Compare 4解除到期限制的技巧
    [转]一个非常实用而且精妙的算法-并查集(java语言实现)
    Java实现比较两个List集合是否相等
    Java比较两个List集合的方法
    [转]Java & PHP RSA 互通密钥、签名、验签、加密、解密
    【LeetCode】192周赛-5428. 重新排列数组
  • 原文地址:https://www.cnblogs.com/JustinLau/p/12362794.html
Copyright © 2011-2022 走看看