ASP.NET MVC 4 Ajax上传文件
这两天一直纠结着表单的问题。想在一个表单里实现三个功能:
- 输入查询条件,点击查询;
- 导出查询数据;
- 上传文件;
方法有很多,乱花渐欲迷人眼,尝试了很多,无果。大致说的是,给不同按钮写js代码,在js代码里设置url和get、post、multipart/form-data等属性。看到猎风的demo很不错:
<script type="text/javascript">
function save()
{
document.form1.action="a.asp";
document.form1.submit();
} function send()
{
document.form1.action="b.asp";
document.form1.submit();
}
</script>
</head>
<body>
<form name="form1">
<input type="text" name="username" value="scott">
<input type="button" value="发送" onclick="send();">
<input type="button" value="保存" onclick="save();">
</form>
</body>
很清晰的代码!可惜我用不上。
后来终于做了一个艰难的决定——上传文件用一个form,另两个功能用一个form,总共两个form。
上传文件用MVC的html辅助方法吧:
@using (@Html.BeginForm("ImportExcel0", "BOM", FormMethod.Post, new { id = "UploadForm", enctype = "multipart/form-data" }))
{
<input type="file" id="FileUpload1" name="FileUpload1" />
<input id="import" type="submit" value="导入Excel" />
}
哦,这个虽然可以上传文件,但是刷新页面会重复提交。好吧,用Ajax.BeginForm,这个是异步的应该不会导致重复提交。折腾许久发现这个Ajax.BeginForm根本不能上传文件!要异步上传文件,还得用jquery.form.js这个插件。http://malsup.com/jquery/form/
Let's go !
HTML:
<form id="UploadForm" name="UploadForm" action="/BOM/ImportExcel0/" method="post" enctype="multipart/form-data">
<input type="file" id="FileUpload1" name="FileUpload1" />
<input id="import" type="submit" value="上传" />
</form>
Javascript:
$("#UploadForm").ajaxForm({
iframe: true,
dataType: "json",
beforeSubmit: function () {
if ($('#FileUpload1').val() == '') {
alert('请选择文件!');
return false;
}
},
success: function (result) {
$("#UploadForm").resetForm();
var DialogVars = $.parseJSON(result);//响应信息
if (result.success) {
toastr.success(result.message, 'Success Message')
alert(result.message);
//导入成功后记录数没实时更新
$("#list").trigger("reloadGrid");
}
else {
toastr.error(result.message, 'Error Message')
alert(result.message);
}
},
error: function (xhr, textStatus, errorThrown) {
$("#UploadForm").resetForm();
toastr.error('文档上传错误.', 'Error Message')
}
});
这里有些东西后面介绍。
Controller:
public ActionResult ImportExcel0()
{
if (Request.Files["FileUpload1"] != null && Request.Files["FileUpload1"].ContentLength > )
{
string fileName = System.IO.Path.GetFileName(Request.Files["FileUpload1"].FileName);
//string extension = System.IO.Path.GetExtension(fileName);
string serverPath = string.Format("{0}/{1}", Server.MapPath("~/Content/UploadedFolder"), fileName);
if (System.IO.File.Exists(serverPath))
System.IO.File.Delete(serverPath); Request.Files["FileUpload1"].SaveAs(serverPath); try
{
ImportExportData.ImportExcel(serverPath, "BOMs");
ViewBag.Msg = "good";
System.IO.File.Delete(serverPath);
return Json(new { success = true, message = "导入成功!", fileName = fileName });
}
catch (Exception ex)
{
ViewBag.Msg = ex.Message;
System.IO.File.Delete(serverPath);
return Json(new { success = false, message = "导入失败" + ex.Message, fileName = fileName });
}
}
return View("Index");
}
看起来还行,可以运行。但是问题接踵而来。
1、在IE8里点击上传文件后,文本框内容不消失,如果继续点击上传按钮,还会上传一次。
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAATUAAAATCAIAAAB+/w3MAAAFLElEQVR4nO2bzW7bRhDHB1UPki0byDnXwm1U+9R7kHsBn1qEzkPkAXJJIcVtc8gjFELQGI6KAnkJA00NxHmAJkEqhTQpRUrctD2Uh/Qw1nQ6O7tcWSL1EQ7+IJbL4XJ3Mz/ucOXAP3/9LXT48NFoOCq17Dp8+Ij+Tb//6XRlZEZscPf96wWw4O57s29TCko+V1WCz8FZahMAqOXMGvNS3ir5LPlcEQk++2epQwCglvmpWuDmfsRMZONzMLZqtTqX42AwKPksNYEEn8nbdFIBAB0dBTotQG4+CRWHAcBEPj7+c+Yzfvfga/j83uMhr2zvVW7+cF6OTlpbABtw/ec3Q37XV/CRqLQJW+D25a3juYf4pDLnZMoR9c+Ob3/2X5t58wmGeWJZGKI2PvveBgAT+WT6V6tVLCwWn2EnoICLTloNaGztAI+ksBNUGle+gMCTT+6JbC8aoqKTpsScTD8ilc/Mbqh8xm9TmwBAreFHt39hsvGZJEmSJLVaLckyAPBxUF5VWbZYfEYnrWuXWk9GQ4qY2999yuOvvVe50fKKJDXmwk7gufYuDp/mnEw5ohnyGb1JHQIAOopTqsSyzdztz0puPn3Mk09P54S9FIrmM+wEOPXrwXXis71XQQj7Z8fffLKNlRgx9582KTrjdw8CCO4/bWIktfcqO7sHFDpH+9v8VI05/lKgXPFjaNBrgieQGMG8ESpjiN9onTvv7B7QjdQHXNyApej0xqHUlHyoDzQ/VGPOiW1E5hNtDRKfePXqnabohjk52A3BZzhKfQQA6pFftd1VgGx8xnEcx3GtVouzzHyzmFf5aWaDZIXyiQGEkXG0v83B4JghqxiLh3/8StEZdgIkAWOUB6vnmkBuvCe0BPFK9SmCz8uXWk9G53dhGXPye4+HvD9H+9t0dWv8xUgP5e1z2MJOcHn8YhJzoo5IfaLaIHmGnYADybthTg7eJfh8NUp9BADqkV91l3OVjc9TbwMA9yVHjqDetba2hoVC+eQxp+a3PJ2jiKHoxJ0SAYm5yvnwqVLBu6c2oj5aLavtE702/jkY7jnxHJHaIC3+jf8nDuYweVMqn93XqVsAoBbo1LOcq9x8EioX41M4ZHoKK5RPeq87+MQklgcuRucvf/4YGAFNOS0x7JnfchQpxHn3pueTb7TiMqU2pW758ARbnRNzROoT1QZp8W9/e4Wycd6yOjkqn78PUocAgBfoVJRFpe2SWe9f6Vau66fJZ+biebrI66e5TqJns9M01xAMXJ4Du/l0Z5U5rZ/upmwbM2LjR8yJe0SqRKaKST7/Gr/A+vlykNoEAKJs1vBTqlHduIN6l7vSLRufURRFUbS+vh5lGQBcwCHzriiKFu77c2R8Z2J0wvjLTQQi7uheM7gyPfmvET7fn5j+iT6LELfxqebeNj550ttgG0Vim0fMiRiR7Ylmg2J/SHw52yZH5fNFP80UAJg1VMnLwkG9lIdsfIbeBgCeDjiozFvq9ToWit6/pTTs6p2muX/L0znap8UoUXcyRuMdSPXXdvPXfO7muX+LWMK4z4Hf+skTS7XnYimmx5nbrWJOHCMyn6g2aHZ4Z/dAdEPdvzX5fN5PV0BuPgmVmfApKM20pf/7Ps8f7kpNKZXPZ0m6ArLx+cppkGXCWW3B1ni9XsfC0vNp/uxZKg99gHz2er1er7exsdGbny0xn+of6JbKSSqfv8XpCsjN51yMXgpLzGep4vVB/f/sbrfb7XY3NzfnckQrjs9Sq6GZh8tiivicr+XB57/5D/c6q8iPLAAAAABJRU5ErkJggg==" alt="" />
2、在IE8里上传成功后应该返回一个信息,这个信息是json格式的,但是IE8接收不到json格式的数据!实际情况是,当点击上传按钮后,本期望的弹出信息没看到反而出来一个下载提示:
aaarticlea/png;base64,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" alt="" />
再次向IE致敬!
寻寻觅觅,终于得知是ContentType问题,这个类型应该设置为text/html才行。这个是在服务端设置的,传给客户端后再转成json的格式来接收。
再看Controller里的action:
public ActionResult ImportExcel0()
{
if (Request.Files["FileUpload1"] != null && Request.Files["FileUpload1"].ContentLength > )
{
string fileName = System.IO.Path.GetFileName(Request.Files["FileUpload1"].FileName);
//string extension = System.IO.Path.GetExtension(fileName);
string serverPath = string.Format("{0}/{1}", Server.MapPath("~/Content/UploadedFolder"), fileName);
if (System.IO.File.Exists(serverPath))
System.IO.File.Delete(serverPath); Request.Files["FileUpload1"].SaveAs(serverPath); try
{
ImportExportData.ImportExcel(serverPath, "BOMs");
ViewBag.Msg = "good";
System.IO.File.Delete(serverPath);
//为避免IE8出现下载文件提示,需将ContentType设置为"text/html"
JsonResult jt = Json(new { success = true, message = "导入成功!", fileName = fileName });
jt.ContentType = "text/html";
return jt;
//增加以上3行代码。注释以下1行代码
//return Json(new { success = true, message = "导入成功!", fileName = fileName });
}
catch (Exception ex)
{
ViewBag.Msg = ex.Message;
System.IO.File.Delete(serverPath);
JsonResult jt = Json(new { success = false, message = "导入失败" + ex.Message, fileName = fileName });
jt.ContentType = "text/html";
return jt;
//return Json(new { success = false, message = "导入失败" + ex.Message, fileName = fileName });
}
}
return View("Index");
}
这样一来居然把上面出现的两个问题同时解决了!
本来对于清除input type=file的问题愁肠百转,找到一个方法看起来很厉害的样子:
//清除file文本框的内容
window.reset2 = function (e) {
e.wrap('<form>').closest('form').get(0).reset();
e.unwrap();
}
现在不用纠结了。
注:
javascript代码里有个toastr,这个是个信息提示插件,详情可见:http://kevintsengtw.blogspot.com/2013/03/aspnet-mvc-jquery-form-plugin.html#.UoYcWdLWamQ
一些链接:
http://blog.163.com/rihui_7/blog/static/212285143201361735143401/
http://www.oschina.net/question/223750_123703
http://my.oschina.net/wangr15/blog/160054
深入理解jQuery中$.get、$.post、$.getJSON和$.ajax的用法
http://www.itivy.com/jquery/archive/2011/7/6/jquery-get-post-getjson-ajax.html
ASP.NET MVC 4 Ajax上传文件的更多相关文章
- ASP.NET MVC 4 批量上传文件
上传文件的经典写法: <form id="uploadform" action="/Home/UploadFile" method="post& ...
- asp.net Mvc 使用uploadify 上传文件 HTTP 302 Error
CSHTML代码 @{ if (Request.Cookies[FormsAuthentication.FormsCookieName] != null) { <input type=" ...
- IE8/9 JQuery.Ajax 上传文件无效
IE8/9 JQuery.Ajax 上传文件有两个限制: 使用 JQuery.Ajax 无法上传文件(因为无法使用 FormData,FormData 是 HTML5 的一个特性,IE8/9 不支持) ...
- atitit.ajax上传文件的实现原理 与设计
atitit.ajax上传文件的实现原理 与设计 1. 上传文件的三大难题 1 1.1. 本地预览 1 1.2. 无刷新 1 1.3. 进度显示 1 2. 传统的html4 + ajax 是无法直 ...
- ASP.NET MVC+LayUI视频上传
前言: 前段时间在使用APS.NET MVC+LayUI做视频上传功能的时,发现当上传一些内存比较大的视频就会提示上传失败,后来通过查阅相关资料发现.NET MVC框架为考虑安全问题,在运行时对请求的 ...
- springMVC+jsp+ajax上传文件
工作中遇到的小问题,做个笔记 实现springMVC + jsp + ajax 上传文件 HTML <body> <form id="myform" method ...
- Ajax上传文件进度条显示
要实现进度条的显示,就要知道两个参数,上传的大小和总文件的大小 html5提供了一个上传过程事件,在上传过程中不断触发,然后用已上传的大 小/总大小,计算上传的百分比,然后用这个百分比控制div框的显 ...
- 伪ajax上传文件
伪ajax上传文件 最近在折腾伪ajax异步上传文件. 网上搜索了一下,发现大部分方法的input file控件都局限于form中,如果是在form外的呢? 必须动态生成一个临时form和临时if ...
- flask jQuery ajax 上传文件
1.html 代码 <div> <form id="uploadForm" enctype="multipart/form-data" > ...
随机推荐
- 【Android】Android ListViewAnimations分析
使用:https://github.com/android-cn/android-open-project-demo/tree/master/listview-animations-demo APK例 ...
- Sql2005 全文索引详解
1.前言 14.1 全文索引的介绍 14.2 全文索引中常用的术语 14.3 全文索引的体系结构 14.4 全文目录管理 14.4.1 创建全文目录 14.4.2 查看与修改全文目录 14 ...
- IE兼容性问题解决方案1--ajax请求不发送到后台
相信很多小伙伴会遇到这种问题,用ajax做异步请求的时候,在IE浏览器下,并没有发送出去.但是相关程序确实执行了.为什么呢? 原来这是IE缓存方式的原因,所以呢,用下边的解决方案吧. 1.在请求的UR ...
- Leetcode OJ : Merge k Sorted Lists 归并排序+最小堆 mergesort heap C++ solution
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...
- VMware 克隆虚拟机或加载新的已安装虚拟机时System eth0不能使用的解决方法
近年来的大数据应用特别热,特别是Hadoop和Spark.但大家使用这些分布式文件系统和计算框架都需要一个分布式的集群环境,而大家手头一般没有多余的机器部署master和多个slave节点,就只能在V ...
- [转载] Zookeeper中的 ACL(Access Control List)访问控制列表
zk做为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全,ZK通过ACL机制来解决访问权限问题,详见官网文档:ht ...
- 打造无DLL版穿透防火墙Downloader
这份代码的思路来自于国外EES组织的Aphex.基本上所有的无DLL Download都是利用的这种方法.其实也就是用烂了的远程注入法.不过注入的对象不是一个DLL,而是本身的一个过程.下面是代码,由 ...
- 转载最佳JQuery学习网站
转载文章,原出处: http://www.gbin1.com/technology/jquery/learningjquerywebsites/ jQuery是目前最流行的 JavaScript ...
- Servlet+Tomcat 界面登录
1.文件夹建立(必须按照这个规范,文件名和文件夹名必须一致) a.在%TOMCAT_HOME%\webapps下建立一个文件夹,取名MyWebsit b.在MyWebsit文件夹下新建WEB_INF文 ...
- 为什么只有在用Visual Studio启动程序时会抛出InvalidOperationException异常
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:为什么只有在用Visual Studio启动程序时会抛出InvalidOperationExceptio ...