.net mvc web api上传图片/文件并重命名
来源:互联网 发布:手机网络接收器 编辑:程序博客网 时间:2024/06/05 01:15
写这个上传图片也是耗时好久,以前在asp.net的时候因为自己写前台加后台。后台也很简单的就能拿到数据,不做多少判断。直到现在写项目,才感觉当初多差,在此告诫下大家写代码时该做的判断,自己尽可能去完善逻辑与错误判断。
这个项目是拿.net mvc web api写的后台,android写的客户端。
上传文件的大体思路在从http传输的数据域中拿到2进制数据,并保存下来
废话不多说,代码附上:
#region 上传图片 /// <summary> /// 上传图片到服务器 当error为0时成功,为1时失败 并从errmsg获取消息 /// </summary> /// <returns></returns> public Task<Hashtable> post() { String PhoneId = null; // 检查是否是 multipart/form-data if (!Request.Content.IsMimeMultipartContent("form-data")) throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); //文件保存目录路径 //string SaveTempPath = "~/App_Data/"; //System.String dirTempPath = HttpContext.Current.Server.MapPath(SaveTempPath); System.String dirTempPath = @"C:\picture"; // 设置上传目录 var provider = new MultipartFormDataStreamProvider(dirTempPath); //var queryp = Request.GetQueryNameValuePairs();//获得查询字符串的键值集合 //接受数据并保存文件 var task = Request.Content.ReadAsMultipartAsync(provider). ContinueWith<System.Collections.Hashtable>(o => { Hashtable hash = new Hashtable(); hash["error"] = 1; hash["errmsg"] = "上传出错"; var file = provider.FileData[0];//provider.FormData string orfilename = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"'); FileInfo fileinfo = new FileInfo(file.LocalFileName); //判断拿到的PhoneId PhoneId = provider.FormData["PhoneId"]; if (string.IsNullOrEmpty(PhoneId.Trim()) || PhoneId.Trim().Length == 0) { hash["error"] = 1; hash["errmsg"] = "未上传PhoneId"; fileinfo.Delete(); //如果不写这句你会发现 返回的数据是正常的 但文件依旧会Down下来 return hash; } //最大文件大小 int maxSize = 10000000; if (fileinfo.Length <= 0) { hash["error"] = 1; hash["errmsg"] = "请选择上传文件。"; fileinfo.Delete(); return hash; } else if (fileinfo.Length > maxSize) { hash["error"] = 1; hash["errmsg"] = "上传文件大小超过限制。"; fileinfo.Delete(); return hash; } else { string fileExt = orfilename.Substring(orfilename.LastIndexOf('.')); //定义允许上传的文件扩展名 String fileTypes = "gif,jpg,jpeg,png,bmp"; if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(fileTypes.Split(','), fileExt.Substring(1).ToLower()) == -1) { hash["error"] = 1; hash["errmsg"] = "上传文件扩展名是不允许的扩展名。"; fileinfo.Delete(); return hash; } else { string path = @"picture\" + PhoneId + ".jpg"; try { if (modelusers.updatePicture(PhoneId, path) != 1) { hash["error"] = 1; hash["errmsg"] = "更新数据库失败"; fileinfo.Delete(); return hash; } } catch (Exception ex) { hash["error"] = 1; hash["errmsg"] = "更新数据库失败2"; fileinfo.Delete(); return hash; } String ymd = DateTime.Now.ToString("yyyyMMdd", System.Globalization.DateTimeFormatInfo.InvariantInfo); //String newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", System.Globalization.DateTimeFormatInfo.InvariantInfo); String newFileName = PhoneId; fileinfo.CopyTo(Path.Combine(dirTempPath, newFileName + fileExt), true); fileinfo.Delete(); hash["error"] = 0; hash["errmsg"] = "上传成功"; } } return hash; }); return task; } #endregion
值得注意的几点:
- 当上传成功时,error值为0。失败时,error为1并从errmsg中获取失败消息。
- 在文件路径处偷了个懒直接把文件的路径塞上去了,如果是从当前路径下放文件的话,请遵循注释。
- PhoneId = provider.FormData[“PhoneId”];这句拿到你应该上传的文件名,根据你的需求修改
- 如果不进行重新命名的话,文件会有默认命名值,并且没有后缀名。这是因为MVC4.0 WebAPI上传后的图片默认以字符串bodypart结合Guid来命名,且没有文件后缀
- fileinfo.Delete();如果不写这句你会发现 返回的数据是失败的 但文件依旧会Down下来 这是因为文件在一开始执行的时候就已经保存下来了,所以在失败后你应该将他删除。
接下来是我自己写的简单测试代码,各位再写完接口时要自己多测试测试,塞一些异常数据进去,看看是否能够正常运行,不要等到后期出问题了再反过头去修改。
<html> <form action="这里写接口url" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <hr> <input type="text" name="PhoneId" id="PhoneId"> <hr> <input type="submit" value="submit" id="btnPutUserInfo"> </form> </html>
1 0
- .net mvc web api上传图片/文件并重命名
- struts文件上传并重命名
- jsp中用cos上传文件并重命名
- 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .ne
- FileUpload上传指定格式的图片并重命名
- Busboy 上传文件到指定目录,并重命名,node.js
- .NET MVC 图片上传
- Web Api 图片上传
- python 复制并重命名文件
- 批处理复制文件并重命名
- php下载文件并重命名
- php 复制文件并重命名
- php文件下载并重命名
- PHP下载并重命名文件
- 在.net MVC中异步上传图片或者文件
- ASP.NET MVC图片文件上传与下载
- .net mvc 上传PPT文件转化为图片解决方案
- ASP.NET MVC 图片上传
- PID3 / Jam的计数法 ☆
- 基于OpenWrt添加ubus支持
- 将博客搬至CSDN
- 几种USB控制器类型:OHCI,UHCI,EHCI,XHCI
- Easy-题目40:36. Valid Sudoku
- .net mvc web api上传图片/文件并重命名
- 第7章:快速排序
- Android小白入坑之行
- Easy-题目41:219. Contains Duplicate II
- 第六次作业
- hive的UDF 函数(User-Defined-Function)
- Mybatis自动生成代码
- 安卓开发环境配置
- 关于建站的体会