webapi 上传图片_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > webapi 上传图片

webapi 上传图片

 2015/1/23 3:22:51  花落依然暖  程序员俱乐部  我要评论(0)
  • 摘要:需求:上传学员信息时同时上传头像信息,学员基本信息表和科目表为一对多关系表(添加基本信息后添加通过科目信息)。测试:[HttpPost]publicstringPost(){if(!Request.Content.IsMimeMultipartContent())thrownewHttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable,"InvalidRequest!"))
  • 标签:API Web 图片 上传
需求:上传学员信息时同时上传头像信息,学员基本信息表和科目表为一对多关系表(添加基本信息后添加通过科目信息)。   测试:
        [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() 执行完的时候启动子线程去添加科目信息。

Tencent\Users\1325089891\QQ\WinTemp\RichOle\M3X%U`D}U8`41Y}{842B}LA.png" alt="" />  
上一篇: 豪情-CSS解构系列之-新浪页面解构-01 下一篇: 没有下一篇了!
发表评论
用户名: 匿名