需求:上传学员信息时同时上传头像信息,学员基本信息表和科目表为一对多关系表(添加基本信息后添加通过科目信息)。
 
测试:
        [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. 【转】ipad死机了,无法退出,也无法关机,怎么办

    原文网址:http://zhidao.baidu.com/link?url=oTz6J78hmtCAKddhwu1ITUiPmLnVJIaA_v_0dZblPaIJUhuMdyTCdS6H2737GX ...

  2. Linux桌面快捷方式建立方案

    Linux桌面快捷方式建立方案 以下以添加Eclips为例 在桌面上添加Eclips.desktop 文件,向其写入如下代码 [Desktop Entry] Name=Eclipse Comment= ...

  3. Java 8 默认方法和多继承深入解析

    以前经常谈论的Java对比c++的一个优势是Java中没有多继承的问题. 因为Java中子类只能继承(extends)单个父类, 尽管可以实现(implements)多个接口,但是接口中只有抽象方法, ...

  4. Hibernate Validation使用示例及讲解

    Hibernate Validation使用示例及讲解 时间 -- :: ITeye-博客 原文 http://wdmcygah.iteye.com/blog/2174680 主题 Java 在项目开 ...

  5. JAVA 并发实现六(Volatile的使用)

    Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量. 这两种机制的提出都是为了实现代码线程的安全性.其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低 ...

  6. SQL-MICK基础

    /*Select语句完整的执行顺序:1.from子句组装来自不同数据源的数据:2.where子句基于指定的条件对记录行进行筛选:3.group by子句将数据划分为多个分组:4.使用聚集函数进行计算: ...

  7. linux下javaEE系统安装部署

    最近公司在将服务器往阿里云上面迁移,所以需要重新在linux上面安装相关的软件以及部署项目,这里用到的linux版本为centos7.0,需要安装的软件有 jdk1.7.mysql5.6.mongo3 ...

  8. 手游架构-REST架构

    REST架构风格是全新的针对Web应用的开发风格,是当今世界最成功的互联网超媒体分布式系统架构,它使得人们真正理解了Http协议本来面貌.随着 REST架构成为主流技术,一种全新的互联网网络应用开发的 ...

  9. JAVA程序猿怎么才干高速查找到学习资料?

    JAVA程序猿怎么才干高速查找到学习资料? JAVA学习资料在互联网上较为零散,并且大多是英文的.以下介绍3种方式,让程序猿能够高速地找到自己想要的资料. 一.导航站点: 有非常多类似hao123的站 ...

  10. MySQL数据库中的哈希加密

    数据库安全是数据库中最为重要的环节,只有确保了数据库中数据的安全,才能够更好的发挥数据库的功能,本文将为大家介绍一种很好的数据库加密方法,即哈希加密. 导读:MySQL数据库加密的方法有很多种,不同的 ...