HttpWebRequest post 文件

 public ResultObject PostFile(string url, string filePath, Dictionary<string, object> items)
        {
            string boundary = DateTime.Now.Ticks.ToString("x");
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.ContentType = "multipart/form-data; boundary=" + boundary;
            request.Method = "POST";

            // 最后的结束符  
            var endBoundary = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");

            //文件数据
            string fileFormdataTemplate =
                "--" + boundary +
                "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"" +
                "\r\nContent-Type: application/octet-stream" +
                "\r\n\r\n";

            //文本数据 
            string dataFormdataTemplate =
                "\r\n--" + boundary +
                "\r\nContent-Disposition: form-data; name=\"{0}\"" +
                "\r\n\r\n{1}";

            string fileHeader = string.Format(fileFormdataTemplate, "upfile", filePath);
            var fileBytes = Encoding.UTF8.GetBytes(fileHeader);

            using (var postStream = new MemoryStream())
            {
                //写入文件格式串
                postStream.Write(fileBytes, 0, fileBytes.Length);

                #region 写入文件流
                using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {
                    byte[] buffer = new byte[1024];
                    int bytesRead = 0;
                    while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) != 0)
                    {
                        postStream.Write(buffer, 0, bytesRead);
                    }
                }
                #endregion

                #region 写入其他表单参数
                foreach (KeyValuePair<string, object> key in items)
                {
                    var p = string.Format(dataFormdataTemplate, key.Key, key.Value);
                    var bp = Encoding.UTF8.GetBytes(p);
                    postStream.Write(bp, 0, bp.Length);

                    //System.Diagnostics.Debug.WriteLine(p);
                }
                #endregion

                //写入结束边界
                postStream.Write(endBoundary, 0, endBoundary.Length);

                #region 写入流

                request.ContentLength = postStream.Length;
                postStream.Position = 0;
                using (Stream ds = request.GetRequestStream())
                {
                    byte[] buffer = new byte[1024];
                    int bytesRead = 0;
                    while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) != 0)
                    {
                        ds.Write(buffer, 0, bytesRead);
                    }
                }
                #endregion

                #region 获取返回值

                string result = string.Empty;
                using (HttpWebResponse rep = (HttpWebResponse)request.GetResponse())
                {
                    using (Stream ds = rep.GetResponseStream())
                    {
                        using (StreamReader sr = new StreamReader(ds))
                        {
                            result = sr.ReadToEnd();
                        }
                    }
                }

                JObject jresult = JObject.Parse(result);
                if (bool.Parse(jresult["success"].ToString()))
                {
                    return new ResultObject(EnumState.ok, "ok", jresult["data"]);
                }
                else
                {
                    return new ResultObject(EnumState.err, jresult["data"].ToString());
                }

                #endregion
            }
        }

mvc 控制器中接收文件:

 public ActionResult UpLoad()
        {
            return Common.ActFuncJson(() =>
            {

                if (Request.Files.Count == 0) throw new Exception("请上传文件");

                string token = Request.Form["token"];
                string fileName = Request.Form["fileName"];
                int current = int.Parse(Request.Form["current"]);
                int nums = int.Parse(Request.Form["nums"]);

                string path = string.Format(@"{0}\{1}\{2}", UConfig.UploadPath, token, fileName);
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }

                string fname = string.Format(@"{0}\{1}", path, current);
                Request.Files[0].SaveAs(fname);

                return "ok";
            });
        }

参考:
https://blog.csdn.net/yue1183283159/article/details/49884743
https://blog.csdn.net/xxj_jing/article/details/50221113

猜你喜欢

转载自blog.csdn.net/wyljz/article/details/80283967