需求:上传学员信息时同时上传头像信息,学员基本信息表和科目表为一对多关系表(添加基本信息后添加通过科目信息)。
 
测试:
        [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(, fileName.Length - ); 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() 执行完的时候启动子线程去添加科目信息。

 

webapi 上传图片的更多相关文章

  1. WebApi上传图片 await关键字

    await关键字对于方法执行的影响 将上一篇WebApi上传图片中代码修改(使用了await关键字)如下: [HttpPost] public async Task<string> Pos ...

  2. kindeditor修改图片上传路径-使用webapi上传图片到图片服务器

    kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 在这里我着重介绍一些使用kindeditor修改图片上传路径并通过webapi上传图片到图片服务器的方案. 因为我使用的 ...

  3. kindeditor扩展粘贴图片功能&修改图片上传路径并通过webapi上传图片到图片服务器

    前言 kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. 本篇博文需要解决的问题有两个: kindeditor扩展粘贴图片功 ...

  4. kindeditor扩展粘贴截图功能&修改图片上传路径并通过webapi上传图片到图片服务器

    前言 kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. 本篇博文需要解决的问题有两个: kindeditor扩展粘贴图片功 ...

  5. Asp.Net WebApi上传图片

    webapi using System; using System.Collections; using System.Collections.Generic; using System.Diagno ...

  6. WebClient和HttpClient, 以及webapi上传图片

    httppost请求. applicationkey/x-www-form-urlencoded请求: Email=321a&Name=kkfewwebapi里面, 如果用实体, 能接受到. ...

  7. ajax C# webapi上传图片

    html ajax上传图片到服务器 后端采用asp.net webapi 前端有各种现实上传图片的控件,样式可以做的很美观.我这里只用基本的样式做图片上传. 前端代码 <input name=& ...

  8. ajax+webapi上传图片问题

    自己想写一个原生的JS的图片上传,不想一直只是使用上传文件的框架 网上有很多jquery上传图片上传文件的插件,但是要不是用特定的后台框架接收,要不就是只能上传图片,不是文件,还有一些其他的问题,所以 ...

  9. .Net Core WebApi上传图片的两种方式

    我这边主要是为了上传图片,话不多说,上代码. 方式一:通过Form表单上传 后端: /// <summary> /// 上传图片,通过Form表单提交 /// </summary&g ...

  10. webapi上传图片的两种方式

    /// <summary>        /// App上传图片        /// </summary>        /// <returns>返回上传图片的 ...

随机推荐

  1. New ipad安装Perl支持安装nikto

    Title:New ipad安装Perl支持安装nikto --2012-11-15 09:47 New Ipad 越了后. ssh new ipad 进入目录 cd /tmp 下载Key文件 wge ...

  2. Android 获取网络链接类型

    /** * 获取当前网络类型 * @return 0:没有网络 1:WIFI网络 2:WAP网络 3:NET网络 */ public int getNetworkType() { int netTyp ...

  3. ural 1723 Sandro's Book

    http://acm.timus.ru/problem.aspx?space=1&num=1723 #include <cstdio> #include <cstring&g ...

  4. C 語言中的編譯指示 (Pragma)

    編譯指示 #pragma 是用來告知編譯器某些特殊指示,例如不要輸出錯誤訊息,抑制警告訊息,或者加上記憶體漏洞檢查機制等.這些指示通常不是標準的 C 語言所具備的,而是各家編譯器廠商或開發者所制定的, ...

  5. BZOJ3391: [Usaco2004 Dec]Tree Cutting网络破坏

    3391: [Usaco2004 Dec]Tree Cutting网络破坏 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 47  Solved: 37[ ...

  6. linux下编译eXosip、osip,以及UAC和UAS的例子

    从网站上看到了这样的一篇博文 :Windows下编译eXosip.osip,以及UAC和UAS的例子 (链接:http://www.cnblogs.com/dyllove98/archive/2013 ...

  7. ORACLE STUDY NOTES 01

    [JSU]LJDragon's Oracle course notes In the first semester, junior year DML数据操纵语言 DML指:update,delete, ...

  8. cnBlogs_代码着色

    一个程序员当然希望写出来的代码不仅质量上好,而且看上去也很好.以前在网络上看见别人写的代码,着色以及背景都好极了,很是羡慕,但就是不知道如何设置 --------------------------- ...

  9. Python进阶(面向对象编程基础)(三)

    6.类属性和实例属性名字冲突怎么办 修改类属性会导致所有实例访问到的类属性全部都受影响,但是,如果在实例变量上修改类属性会发生什么问题呢? class Person(object): address ...

  10. UVA10765-Doves and bombs(BCC)

    option=com_onlinejudge&Itemid=8&page=show_problem&problem=1706">题目链接 题意:给定一个n个点的 ...