一 前端
html部分代码 <form enctype="multipart/form-data"> <div> <input type="file" name="uploadImage" id="uploadImage"> <input type="button" id="btn" value="上传" /> </div> </form> js部分代码 $("#btn").click(function () { var formData = new FormData(); formData.append("FileUpload1", document.getElementById('uploadImage').files[0]); $.ajax({ url: '/api/common/imgupload', type: "POST", data: formData, /** *必须false才会自动加上正确的Content-Type */ contentType: false, /** * 必须false才会避开jQuery对 formdata 的默认处理 * XMLHttpRequest会对 formdata 进行正确的处理 */ processData: false, success: function (data) { alert(JSON.stringify(data)); } }); })二 webapi 后台
/// <summary> /// 上传 /// </summary> /// <returns></returns> [HttpPost] [Route("api/common/imgupload")] public Task<Hashtable> Imgupload() { // 检查是否是 multipart/form-data if (!Request.Content.IsMimeMultipartContent("form-data")) throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); //文件保存目录路径 string SaveTempPath = "/upload/head/"; String dirTempPath = HttpContext.Current.Server.MapPath(SaveTempPath); if (!Directory.Exists(dirTempPath)) { Directory.CreateDirectory(dirTempPath); } // 设置上传目录 var provider = new MultipartFormDataStreamProvider(dirTempPath); var task = Request.Content.ReadAsMultipartAsync(provider). ContinueWith<Hashtable>(o => { Hashtable hash = new Hashtable(); hash["code"] = 0; hash["msg"] = "上传出错"; var file = provider.FileData[0]; string orfilename = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"'); FileInfo fileinfo = new FileInfo(file.LocalFileName); //最大文件大小 int maxSize = 10000000; if (fileinfo.Length <= 0) { hash["code"] = 0; hash["msg"] = "请选择上传文件。"; } else if (fileinfo.Length > maxSize) { hash["code"] = 0; hash["msg"] = "上传文件大小超过限制。"; } 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["code"] = 1; hash["msg"] = "上传文件扩展名是不允许的扩展名。"; } else { String ymd = DateTime.Now.ToString("yyyyMMdd", System.Globalization.DateTimeFormatInfo.InvariantInfo); String newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", System.Globalization.DateTimeFormatInfo.InvariantInfo); fileinfo.CopyTo(Path.Combine(dirTempPath, newFileName + fileExt), true); fileinfo.Delete(); hash["code"] = 1; hash["msg"] = "上传成功"; hash["path"] = SaveTempPath + newFileName + fileExt; } } return hash; }); return task; }