测试时可以直接使用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[];
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 > && thumbnailheight > )
{
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中的不要勾选

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

  1. PC端-上传头像并裁剪

    界面一: <link href="../theme/js/layui.layim/src/css/layui.css" rel="stylesheet"/ ...

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

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  3. 解决HTML5实现一键拨号、一键发短信及上传头像兼容性问题

    HTML5实现一键拨号,一键发短信以及上传头像等问题都是比较常见的场景,近期在做移动端项目的时候遇到阻挠,通过查找资料解决了问题: 废话不多说,直接上案例代码: HTML5实现一键拨号: <a ...

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

    PHP 上传文件接口: //保存图片 $json_result ['status'] = 0; $path = 'upfile'; $json_result ['status'] = 0; $json ...

  5. day105:Mofang:设置页面初始化&更新头像/上传头像&设置页面显示用户基本信息

    目录 1.设置页面初始化 2.更新头像 1.点击头像进入更新头像界面 2.更新头像页面初始化 3.更新头像页面CSS样式 4.头像上传来源选择:相册/相机 5.调用api提供的本地接口从相册/相机提取 ...

  6. html5 上传头像的裁剪

    本示例使用HTML5 canvas,简单的编写了上传头像的裁剪效果,移动端支持拖拽后裁剪, 虽然样式不好看,但是功能还算全: 下图为裁剪后的效果: html部分: <!DOCTYPE html& ...

  7. 上传头像,界面无跳转,php+js

    上传头像,界面无跳转的方式很多,我用的是加个iframe那种.下面直接上代码. html: //route 为后端接口//upload/avatar 为上传的头像的保存地址//imgurl=/uplo ...

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

    现在手机拍照很火,那么如何使用手机拍照并上传头像呢?原因很简单,就是数据传递,首先手机传递照片信息,这个就不是post传递 也不是get函数传递, 这个另外一种数据格式传递,使用的是$GLOBALS ...

  9. flash上传头像,截取图像 组件演示

    效果图如下: HTML页面代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http:// ...

随机推荐

  1. c# 句柄数不断攀升的解决方案

    句柄只是用来标识应用程序中的不同对象和同类中的不同的实例的一个数字,通常情况下,句柄值对普通用户毫无用处,但是句柄数量却可以间接反映出一个程序里产生的对象实例的多少.句柄数越多,代表程序里new 出来 ...

  2. Android设计模式(八)--模板方法模式

    到国美面试Android的时候.问我的设计模式相关的问题: 1.单例模式的意义时什么. 2.有哪几种工厂方法模式: 3.你用过的模板方法模式.举例说明: 自己感觉答的一塌糊涂. 模板方法模式都没说出来 ...

  3. ASP.NET MVC源码分析系列

    Controller下的JsonResult的ExecuteResult方法 public override void ExecuteResult(ControllerContext context) ...

  4. JavaScript经常使用代码段

    把例如以下代码增加<body>区域中: 后退 前进 <!--<input type="button" value="后退" onClic ...

  5. Linux-profile、bashrc、bash_profile之间的区别和联系

    为使Bash更好地为我们服务,我们需定制bash shell环境. ~/.bash_profile.~/.bashrc.和~/.bash_logout 上面这三个文件是bash shell的用户环境配 ...

  6. Git 创建仓库

    本文将为大学介绍如何创建一个远程的Git仓库.您可以使用一个已经存在的目录作为Git仓库或创建一个空目录. 使用您当前的目录作为Git仓库,我们只需要使它初始化. git init 使用我们指定目录作 ...

  7. php中对象是引用类型吗?

    这貌似是一个极其简单的问题,还用得着专门写一篇博文?各位看官,最初我也这么认为,但这的确蒙蔽了你那水灵灵的小眼睛,不妨看看什么是引用? $a = 10; $b = &$a; $b = 20; ...

  8. jquery.flexslider-min.js实现banner轮播图效果

    实现方法 引用jQuery和flexslider.js到你的页面 <script type="text/javascript" src="js/jquery-1.7 ...

  9. 如何在mysql下实现事务的提交与回滚

    最近要对数据库的数据进行一个定时迁移,为了防止在执行过程sql语句因为某些原因报错而导致数据转移混乱,因此要对我们的脚本加以事务进行控制. 首先我们建一张tran_test表 CREATE TABLE ...

  10. UINavigationController 返回按钮去掉文字

    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetric ...