测试时可以直接使用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. (原创)开发使用Android studio所遇到的一些问题总结

    1.Android studio下载链接地址(无需FQ):包括先行版和正式版(推荐使用正式版bug少) http://www.androiddevtools.cn/ 2.第一次安装避免成功先不要急着打 ...

  2. eclipse 编译JAVA 项目导入的WEB项目 无法编译问题

    右击你的项目 选择properties  ---->java Build Path--->Default output folder新建一个classes目录就好了 watermark/2 ...

  3. Openerp约束句型

    内容摘自:http://blog.csdn.net/sz_bdqn/article/details/8785483 _constraints _constraints可以灵活定义OpenERP对象的约 ...

  4. Python-文件修改器

    #-*- coding: utf-8 -*- import os import sys import glob from PyQt4.QtGui import * from PyQt4.QtCore ...

  5. mac 安装2个xcode 时会导致找不到xcodebuild

    mac 安装2个xcode 时会导致找不到xcodebuild 解决方案: sudo  xcode-select --switch /Applications/Xcode.app/Contents/D ...

  6. Js日常笔记之变量删除

    在Javascript是可以使用delete来手动删除变量,通过这样的方法让GC来回收内存,但在JS中并不是所有的对象都可以被删除的 JS中通过 var\function 声明因含有DontDelet ...

  7. nginx 多域名跨域

    当浏览器发起ajax请求到其他域名时,会出现跨域的问题,在nginx上的解决方案是配置Access-Control-Allow-Origin来解决,此参数只允许配置单个域名或者*,当我们需要允许多个域 ...

  8. C语言 Linux环境变量

    /* *@author cody *@date 2014-08-12 *@description */ /* extern char **environ //environment values #i ...

  9. JUC组件扩展(二)-JAVA并行框架Fork/Join(三):在任务中抛出异常

    在java当中,异常一共分为两种.一种是运行时异常,一种是非运行是异常. 非运行时异常:这些异常必须在方法上通过throws子句抛出.或者在方法体内进行try{…}catch{…}来捕获异常. 运行时 ...

  10. Outlets 和Referencing Outlets的区别

    转自:http://blog.sina.com.cn/s/blog_4431c7610100sypy.html 我的理解就是连接与被连接的关系吧 Outlets里面显示的是你的属性, 以及连接着的目标 ...