WebAPI实现移动端上传头像接口

测试时可以直接使用PostMan模拟发送请求

        /// <summary>
        /// 手机端上传头像接口
        /// </summary>
        /// <param name="LoginToken"></param>
        /// <param name="Base64String"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<HttpResponseMessage> UploadAvatar()
        {
            // 检查是否是 multipart/form-data
            if (!Request.Content.IsMimeMultipartContent("form-data"))
                return CreateResponse(false, "请选择要上传的文件!");

            // 设置上传目录
            string root = System.Web.HttpContext.Current.Server.MapPath("/upload/avatars/");
            var provider = new ReNameMultipartFormDataStreamProvider(root);
            string LoginToken = System.Web.HttpContext.Current.Request.Params["LoginToken"];
            var token = new Guid(LoginToken);
            var loginInfo = this.MobileService.GetLoginInfo(token);
            if (loginInfo == null)
            {
                return CreateResponse(false, "登录授权失败!");
            }

            await Request.Content.ReadAsMultipartAsync(provider);

            var file = provider.FileData[0];
            var fileInfo = new FileInfo(file.LocalFileName);
            var fileStream = fileInfo.OpenRead();
            var img = System.Drawing.Image.FromStream(fileStream);
            UploadAvatar upload = new UploadAvatar();
            var result = upload.MobileUploadImage(img);
            //删除中间文件
            //解除占用TODO
            //if (File.Exists(file.LocalFileName))
            //{
            //    File.Delete(file.LocalFileName);
            //}
            if (result.success)
            {
                var person = this.FoundationService.GetPersonInfoById(loginInfo.UserID);
                if (person != null)
                {
                    person.Photo = result.sourceUrl;//头像缩略图地址
                    this.FoundationService.UpdatePersonInfo(person);
                    result.sourceUrl = "http://192.168.3.66:8008" + result.sourceUrl;
                }
            }
            return CreateResponse(true, result);
        }
public Result MobileUploadImage(Image _file)
        {
            bool isThumbnail = true;
            try
            {
                string fileExt = "jpg"; //文件扩展名,不含“.”

                path = HttpContext.Current.Server.MapPath("/upload/avatars/");//上传头像路径
                string newFileName = GetRamCode() + "." + fileExt; //随机生成新的文件名
                string newThumbnailFileName = "thumb_" + newFileName; //随机生成缩略图文件名
                string upLoadPath = "/upload/avatars/yt/" + newFileName;//上传原图目录相对路径
                string upLoadPathS = "/upload/avatars/slt/" + newFileName;//上传缩略图目录相对路径

                //是否存在存放缩略图和原图的文件夹 没有则创建
                string pathS = HttpContext.Current.Server.MapPath("/upload/avatars/slt/");
                string pathY = HttpContext.Current.Server.MapPath("/upload/avatars/yt/");
                if (!Directory.Exists(pathS))
                {
                    Directory.CreateDirectory(pathS);
                }
                if (!Directory.Exists(pathY))
                {
                    Directory.CreateDirectory(pathY);
                }

                string newFilePath = path + "yt\\" + newFileName; //上传后原图的路径
                string newThumbnailPath = path + "slt\\" + newFileName; //上传后的缩略图路径

                #region 检查上传的物理路径是否存在,不存在则创建
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                #endregion

                #region 保存文件
                _file.Save(newFilePath);
                #endregion

                #region 图片剪裁
                //如果是图片,检查是否需要生成缩略图,是则生成
                if (IsImage(fileExt) && isThumbnail && thumbnailwidth > 0 && thumbnailheight > 0)
                {
                    Thumbnail.MakeThumbnailImage(newFilePath, newThumbnailPath, thumbnailwidth, thumbnailheight, "Cut");
                }
                else
                {
                    newThumbnailPath = newFilePath; //不生成缩略图则返回原图
                }
                #endregion

                //处理完毕,返回JOSN格式的文件信息
                return new Result() { success = true, msg = "操作成功!", sourceUrl = upLoadPathS };
            }
            catch
            {
                return new Result() { success = false, msg = "上传过程中发生意外错误!" };
            }
        }

使用PostMan模拟测试时要注意的地方:

Body中请求类型选择 form-data  选择文件的参数key是 MultipartFile

下图中Headers中的不要勾选

时间: 2024-10-06 22:53:30

WebAPI实现移动端上传头像接口的相关文章

移动端 上传头像 并裁剪功能(h5)

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1"> <title>移动端头像图片上传裁剪</title>

PHP -- 上传文件接口编写 及 iOS -- 端上传图片AF实现

PHP 上传文件接口: //保存图片 $json_result ['status'] = 0; $path = 'upfile'; $json_result ['status'] = 0; $json_result ['successmsg'] = '上传失败'; if (isset ( $_FILES ['image'] )) { $upfile = 'upfile/' . $_FILES ['image'] ['name']; if (! @file_exists ( $path )) {

数据采集之Web端上传文件到Hadoop HDFS

前言 最近在公司接到一个任务,是关于数据采集方面的. 需求主要有3个: 通过web端上传文件到HDFS; 通过日志采集的方式导入到HDFS; 将数据库DB的表数据导入到HDFS. 正好最近都有在这方面做知识储备.正所谓养兵千日,用兵一时啊.学习到的东西只有应用到真实的环境中才有意义不是么. 环境 这里只做模拟环境,而不是真实的线上环境,所以也很简单,如果要使用的话还需要优化优化. OS Debian 8.7 Hadoop 2.6.5 SpringBoot 1.5.1.RELEASE 说明一下,这

Fiddler小技巧-测试上传文件接口&多参数并传情况

写了多年的API了,fidder还真是方便至极相对于postman来说. 两种常用方式: 抓包:app通过代理方式,就可以在pc端看到fidder的请求了 因为会监控好多跟我们需要的没关系的HTTP请求, 就要开启过滤了 主动调试API&上传文件参数&其它参数 拷贝点击"upload file"上传之后自动生成的body然后修改: ---------------------------acebdf13572468 Content-Disposition: form-da

[实战]MVC5+EF6+MySql企业网盘实战(4)——上传头像

写在前面 最近又开始忙了,工期紧比较赶,另外明天又要去驾校,只能一个功能一个功能的添加了,也许每次完成的功能确实不算什么,等将功能都实现了,然后在找一个好点的ui对前端重构一下. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册 [实战]MVC5+EF6+MySql企业网盘实战(3)——验证码 [实战]MVC5+EF6+MySql企业网盘实战(4)—

相册选择头像或者拍照 上传头像以NSData 图片二进制格式 表单上传

一.点击头像图片 或者按钮 在相册选择照片返回img,网络上传头像要用data表单上传 (1)上传头像属性 // 图片二进制格式 表单上传 @property (nonatomic, strong) NSData *imageWithData; (2)头像点击事件 - (void)headImageEvent{ NSLog(@"上传头像"); [self selectPhotoAlbumWithSelectPhotoHandle:^(UIImage *img) { self.heade

php实现手机拍照上传头像功能

现在手机拍照很火,那么如何使用手机拍照并上传头像呢?原因很简单,就是数据传递,首先手机传递照片信息,这个就不是post传递 也不是get函数传递, 这个另外一种数据格式传递,使用的是$GLOBALS ['HTTP_RAW_POST_DATA'],这个系统函数跟post很相似,但是$GLOBALS ['HTTP_RAW_POST_DATA']支持的数据格式更丰富些,详细的区别请自己百度谷歌. 设计流程就是: $GLOBALS ['HTTP_RAW_POST_DATA']传递照片数据流(二进制)--

WebUploader 案例【上传头像】

// html <div style="margin-top:34px;" id="box_avatar"> <!--用来存放文件信息--> <div style="float:left;height:115px;width:115px; margin-right:15px;"> <div class="imgWrap"> <img src="" id=

django 上传头像并预览 3选1

注册页面的头像上传 register.html<!DOCTYPE html> 1 <html lang="en"> 2 <head> 3 <meta charset="UTF-8"> 4 <title>Title</title> 5 </head> 6 <body> 7 <div style="margin-left: 30px; margin-top: