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[];
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实现移动端上传头像接口的更多相关文章
- PC端-上传头像并裁剪
界面一: <link href="../theme/js/layui.layim/src/css/layui.css" rel="stylesheet"/ ...
- 移动端 上传头像 并裁剪功能(h5)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- 解决HTML5实现一键拨号、一键发短信及上传头像兼容性问题
HTML5实现一键拨号,一键发短信以及上传头像等问题都是比较常见的场景,近期在做移动端项目的时候遇到阻挠,通过查找资料解决了问题: 废话不多说,直接上案例代码: HTML5实现一键拨号: <a ...
- PHP -- 上传文件接口编写 及 iOS -- 端上传图片AF实现
PHP 上传文件接口: //保存图片 $json_result ['status'] = 0; $path = 'upfile'; $json_result ['status'] = 0; $json ...
- day105:Mofang:设置页面初始化&更新头像/上传头像&设置页面显示用户基本信息
目录 1.设置页面初始化 2.更新头像 1.点击头像进入更新头像界面 2.更新头像页面初始化 3.更新头像页面CSS样式 4.头像上传来源选择:相册/相机 5.调用api提供的本地接口从相册/相机提取 ...
- html5 上传头像的裁剪
本示例使用HTML5 canvas,简单的编写了上传头像的裁剪效果,移动端支持拖拽后裁剪, 虽然样式不好看,但是功能还算全: 下图为裁剪后的效果: html部分: <!DOCTYPE html& ...
- 上传头像,界面无跳转,php+js
上传头像,界面无跳转的方式很多,我用的是加个iframe那种.下面直接上代码. html: //route 为后端接口//upload/avatar 为上传的头像的保存地址//imgurl=/uplo ...
- php实现手机拍照上传头像功能
现在手机拍照很火,那么如何使用手机拍照并上传头像呢?原因很简单,就是数据传递,首先手机传递照片信息,这个就不是post传递 也不是get函数传递, 这个另外一种数据格式传递,使用的是$GLOBALS ...
- flash上传头像,截取图像 组件演示
效果图如下: HTML页面代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http:// ...
随机推荐
- 如何使用angularjs实现文本框获取焦点
<!DOCTYPE html> <html ng-app="myApp"> <head> <title>angularjs-focu ...
- 获取ping的最短、最长、平均时间
# -*- coding: utf-8 -*- import osimport rep = os.popen('ping 120.26.77.101') out = p.read()regex = r ...
- MVC总结--数据传递
View->Controller 1.传统方式,Get方式提交.在Controller中获得client请求: string Name = Request["name"]; ...
- 【Python3 爬虫】17_爬取天气信息
需求说明 到网站http://lishi.tianqi.com/kunming/201802.html可以看到昆明2018年2月份的天气信息,然后将数据存储到数据库. 实现代码 #-*-coding: ...
- Python中给文件加锁
首先要引入库import fcntl打开一个文件f = open('./test')对该文件加密:fcntl.flock(f, fcntl.LOCK_EX)这样就对文件test加锁了,如果有其他进程要 ...
- Linux命令-网络命令:traceroute
首先需要设置VM里面的linux系统能够上网.菜单项->虚拟机->设置,选择NAT模式 菜单项->编辑->虚拟网络编辑器->VMnet8 NAT模式->NAT设置, ...
- linux 常用的命令(转)
常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir ...
- Linux间的进程通信;以及子进程的创建
"-----第六天-----------------------------------------------------------------------------" .版 ...
- Python读取键盘输入
Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘.例如以下: raw_input input raw_input函数 raw_input() 函数从标准输入读取一个行.并返回 ...
- C++ Primer笔记6_STL之泛型算法
1.泛型算法: 大多数算法定义在头文件algorithm中.标准库还在头文件numeric中定义了一组数值泛型算法 仅仅读算法: 举例: find函数用于找出容器中一个特定的值,有三个參数 int v ...