需求:上傳學員信息時同時上傳頭像信息,學員基本信息表和科目表為一對多關系表(添加基本信息后添加通過科目信息)。
測試:
[HttpPost] public string Post() { if (!Request.Content.IsMimeMultipartContent()) throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "Invalid Request!")); //獲取學員信息 Student model = new Student() { Name = HttpContext.Current.Request.Form["StuName"], GroupName = HttpContext.Current.Request.Form["GroupName"], // ... }; //獲取學員通過科目名稱 string passSubject = HttpContext.Current.Request.Form["passSubject"]; //獲取學員未通過科目名稱 string noPassSubject = HttpContext.Current.Request.Form["noPassSubject"]; Trace.WriteLine("begin 添加學員信息"); //添加學員信息 stuService.AddStuByAsync(model).ContinueWith(p => { long stuId = p.Result; Trace.WriteLine("begin 通過科目表"); subjectService.AddPassSubject(passSubject, stuId);//添加此學員通過科目信息 Trace.WriteLine("end 通過科目表"); Trace.WriteLine("begin 未通過科目表"); subjectService.AddPassSubject(noPassSubject, stuId);//添加此學員未通過科目信息 Trace.WriteLine("end 未通過科目表"); }); Trace.WriteLine("end 添加學員信息"); string path = System.Web.HttpContext.Current.Server.MapPath("~/Images/upload/"); Trace.WriteLine("獲取圖片......"); Request.Content.ReadAsMultipartAsync().ContinueWith(p => { var content = p.Result.Contents; Trace.WriteLine("begin 圖片"); foreach (var item in content) { if (string.IsNullOrEmpty(item.Headers.ContentDisposition.FileName)) { continue; } item.ReadAsStreamAsync().ContinueWith(a => { Stream stream = a.Result; string fileName = item.Headers.ContentDisposition.FileName; fileName = fileName.Substring(1, fileName.Length - 2); Trace.WriteLine("圖片名稱:"+fileName); //stream 轉為 image saveImg(path, stream, fileName); }); } Trace.WriteLine("end 圖片"); }); return "ok"; }
表單測試:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body> <form enctype="multipart/form-data" method="post" action="http://localhost:17822/api/Student/Post"> <p><label>學員名稱:</label> <input name="StuName" /></p> <p><label>分組名稱</label><input name="GroupName" /></p> <p><label>通過科目:</label> <input name="passSubject" /></p> <p><label>未通過科目:</label> <input name="noPassSubject" /></p> <p><label>頭像</label> <input type="file" name="dfile" /></p> <p><label></label> <input type="submit" /></p> </form> </body> </html>
提交后結果如下:
通過輸出 "圖片名稱” 在 "end 圖片" 下可以看出,圖片在上傳時主線程已經繼續向下執行了
上部分也是同樣,在方法 AddStuByAsync() 執行完的時候啟動子線程去添加科目信息。

