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

参考: ​