测试时可以直接使用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. nginx安装说明

    下载地址:http://nginx.org/en/download.html 安装版本:1.10.0 安装配置如下: /etc/nginx 目录 /home/nginx目录 --prefix=/hom ...

  2. Python工作日类库Busines Holiday介绍

    引言: 在日常工作中.常常会碰到相似的场景.须要计算在某个时间段内的工作日以及确定某天是否为工作日,这里的介绍的工具包将很好的解决问题. 1. 工具包Business Holiday介绍 其提供了很e ...

  3. [iOS开发] 使用Jenkins自动打包并上传至蒲公英

    设置构建触发器 Poll SCM H/2 * * * * 设置 构建脚本 # #xodebuild & jenkins 自动构建并上传至pgyer.com #2017年5月9日 # #定义一些 ...

  4. Openerp开发进销存系统完毕总结

      转自:http://blog.csdn.net/heartrude/article/details/9142463 安装Openoffice 在openoffice中安装openerp repor ...

  5. win7 linux双系统删除linux

    本文内容收集自互联网,共两篇,中间以“分界线”进行分割. linux的卸载 一.win7与linux都使用grub来引导 卸载:不能直接删除ubuntu分区,这样会造成win7也启动不了 正确方法: ...

  6. 乐鑫esp8266的串口通讯驱动源文件,nonos和rtos版本

    目录 一.前言: 二.esp8266的串口分布情况: 三.esp8266的串口通讯时候,应该怎么接线: 四.esp8266的NONOS非系统,串口编程: 五.esp8266的RTOS实时系统,串口编程 ...

  7. 【微信小程序】转载:微信小程序之购物车功能

    前言 以往的购物车,基本都是通过大量的 DOM 操作来实现.微信小程序其实跟 vue.js 的用法非常像,接下来就看看小程序可以怎样实现购物车功能. 需求 先来弄清楚购物车的需求. 单选.全选和取消, ...

  8. jumpserver v0.5.0 创建用户和管理机器

    用户管理-创建用户    data 用户详情 如下 创建用户组 data 资产列表添加资产 jumpserver 的 root 公钥需保持到 后端服务器的 authorized_keys 里, 然后测 ...

  9. StarUML 破解方法

    在安装目录的:StarUML\www\license\node 找到LicenseManagerDomain.js 在 try 前面加上: return { name:"0xcb" ...

  10. JavaScript-常用正则函数(适合忘记时看)

    test:测试string是否包含有匹配结果,包含返回true,不包含返回false. <script type="text/javascript"> var str ...