C#模拟Http的POST方式的表单提交

public static string UploadFile(string uploadUrl, string FilePath, Dictionary<string, string> dic, string token = "")
        {
            try
            {
                string postData = "";
                int a = 0;
                foreach (KeyValuePair<string, string> para in dic)
                {
                    if (a != 0)
                    {
                        postData += "&" + para.Key + "=" + para.Value;

                    }
                    else
                    {
                        postData += para.Key + "=" + para.Value;
                    }
                    a++;
                }
                var postUrl = string.Format("{0}?{1}", uploadUrl, postData);//拼接url
                request = WebRequest.Create(postUrl) as HttpWebRequest;
                request.AllowAutoRedirect = false;
                request.Method = "POST";
                request.Headers.Add(string.Format("X-AUTH-TOKEN:{0}", token));
                string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线
                request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary;
                byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
                byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");

                int pos = FilePath.LastIndexOf("\\");
                string fileName = FilePath.Substring(pos + 1);

                //请求头部信息 
                StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name=\"file\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n", fileName));
                byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString());

                FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read);
                byte[] bArr = new byte[fs.Length];
                fs.Read(bArr, 0, bArr.Length);
                fs.Close();

                Stream postStream = request.GetRequestStream();
                postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
                postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
                postStream.Write(bArr, 0, bArr.Length);
                postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
                postStream.Close();

                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                Stream instream = response.GetResponseStream();
                StreamReader sr = new StreamReader(instream, Encoding.UTF8);
                string content = sr.ReadToEnd();

                LogHelper.WriteLog("上传文件成功:文件名" + fileName);
                return content;
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog("上传文件失败:" + ex.Message);
                return string.Empty;
            }
            finally
            {
                request.Abort();
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值