在某些版本浏览器下ajaxFileUpload上传文件会提示下载,
1:为什么?
可以观察到,即便返回 JsonResult 在返回的头中也没有任何消息体,直接理解为文本了。
2:解决方案
前端:
function uploadImg(fimgi) {
if ($("#fimg" + fimgi).val().length > 0) { //alert($("#fimg" + fimgi).val().length);}
else { alert("请选择图片"); return; } $.ajaxFileUpload({ type: 'post', url: "/product/UploadProductImage?fimgi=" + fimgi, secureuri: false, fileElementId: 'fimg' + fimgi, dataType: "json", success: function (data) { alert("上传成功!"); //alert(data.O); $("#Img" + fimgi).val(data.O); }, error: function (XMLHttpRequest, textStatus, e) { alert(textStatus); alert(e); } });}
后台改为范围ContentResult,且,ContentType = "text/html"。
public ContentResult UploadProductImage(int fimgi)
{ HttpPostedFileBase head = this.Request.Files["fimg"+fimgi];if (head == null)
{ return new ContentResult { Content = new JavaScriptSerializer { MaxJsonLength = int.MaxValue }.Serialize(new R() { F = 1, M = "对不起,无上传内容!" }), ContentType = "text/html" }; }var supportedTypes = new[] { "jpg", "jpeg", "png", "gif", "bmp" };
var fileExt = System.IO.Path.GetExtension(head.FileName).Substring(1); if (!supportedTypes.Contains(fileExt)) { return new ContentResult { Content = new JavaScriptSerializer { MaxJsonLength = int.MaxValue }.Serialize(new R() { F = 1, M = "对不起,只能上传 jpg, jpeg, png, gif, bmp!" }), ContentType = "text/html" }; }if (head.ContentLength > 1024 * 1024)
{ return new ContentResult { Content = new JavaScriptSerializer { MaxJsonLength = int.MaxValue }.Serialize(new R() { F = 1, M = "对不起,大小超出限制1M!" }), ContentType = "text/html" }; }var r = new Random();
var filename = Guid.NewGuid().ToString("N") + "." + fileExt; string path = this.Server.MapPath("~/upload/product");if (!Directory.Exists(path))
{ Directory.CreateDirectory(path); }var filepath = Path.Combine(path, filename);
head.SaveAs(filepath); string webPath = "/upload/product/" + filename;return new ContentResult
{ Content = new JavaScriptSerializer { MaxJsonLength = int.MaxValue }.Serialize(new R() { F = 0, M = "上传成功,保存为:" + webPath + "!", O = webPath }), ContentType = "text/html" };}