模拟Http请求(跨服务器上传图片)

        public static string ImgUpload(HttpPostedFileBase imgData, string token, string service, string imgUploadUrl)

        {
            #region 构造HTTP请求
            //构造请求地址
            string url = imgUploadUrl + "/Upload.api";

            //设置HttpWebRequest基本信息
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            //设置请求方式:post
            request.Method = "POST";
            //设置boundaryValue
            string boundaryValue = DateTime.Now.Ticks.ToString("x");
            string boundary = "--" + boundaryValue;
            request.ContentType = "\r\nmultipart/form-data; boundary=" + boundaryValue;
            //设置KeepAlive
            request.KeepAlive = true;
            //设置请求数据,拼接成字符串
            StringBuilder sbHtml = new StringBuilder();
            sbHtml.Append(boundary + "\r\nContent-Disposition: form-data; name=\"Token\"\r\n\r\n" + token + "\r\n");
            sbHtml.Append(boundary + "\r\nContent-Disposition: form-data; name=\"Service\"\r\n\r\n" + service + "\r\n");
            sbHtml.Append(boundary + "\r\nContent-Disposition: form-data; name=\"FileData\"; filename=\"" + imgData.FileName + "\"");
            sbHtml.Append("\"\r\nContent-Type:application/octet-stream\r\n\r\n");
            string postHeader = sbHtml.ToString();
            //将请求数据字符串类型根据编码格式转换成字节流
            Encoding code = Encoding.GetEncoding("utf-8");
            byte[] postHeaderBytes = code.GetBytes(postHeader);
            byte[] boundayBytes = Encoding.ASCII.GetBytes("\r\n" + boundary + "--\r\n");

            //设置长度
            long length = postHeaderBytes.Length + imgData.ContentLength + boundayBytes.Length;
            request.ContentLength = length;

            #endregion

            #region 发送请求
            //请求远程HTTP
            Stream requestStream = request.GetRequestStream();
            Stream myStream;
            try
            {
                //发送数据请求服务器
                requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
                byte[] buffer = new byte[imgData.ContentLength];
                imgData.InputStream.Read(buffer, 0, imgData.ContentLength);
                requestStream.Write(buffer, 0, imgData.ContentLength);
                requestStream.Write(boundayBytes, 0, boundayBytes.Length);
                HttpWebResponse HttpWResp = (HttpWebResponse)request.GetResponse();
                myStream = HttpWResp.GetResponseStream();
            }
            catch (Exception ex)
            {
                return "报错:" + ex.Message;
            }
            finally
            {
                if (requestStream != null)
                {
                    requestStream.Close();
                }
            }
            #endregion

            #region 结果处理

            //读取返回处理结果
            StreamReader reader = new StreamReader(myStream, code);
            StringBuilder responseData = new StringBuilder();

            String line;
            while ((line = reader.ReadLine()) != null)
            {
                responseData.Append(line);
            }
            myStream.Close();

            //将返回的json字符串序列化
            SecurityUploadResult model = new SecurityUploadResult();
            model = SlJson.FromJson<SecurityUploadResult>(responseData.ToString());
            if (model.Code == "100")
                return model.Url;
            else
                return model.Error;
            #endregion
           
        }

 

posted @ 2019-05-01 06:37  NCat  阅读(595)  评论(0)    收藏  举报