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

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

  • 相关阅读:
    妙趣横生的HTML5 Page Visibility API
    Django ElasticSearch Ionic 打造 GIS 移动应用 —— 架构设计
    HT for Web的HTML5树组件延迟加载技术实现
    mobileSite开发Tips
    [译] 沙箱中的间谍
    使用Javascript获取剪贴板图片的DataURL
    竖屏旋转摄像头预览数据90度
    centos下安装 gcc,g++,gdb
    centos7连接网络不可达的解决方法
    OpenGL里的坐标系统以及其变换
  • 原文地址:https://www.cnblogs.com/JustinLau/p/12362794.html
Copyright © 2011-2022 走看看