标题:
Asp.net异步上传文件
[打印本页]
作者:
hongniu
时间:
2015-6-25 16:25
标题:
Asp.net异步上传文件
本帖最后由 hongniu 于 2015-6-25 16:28 编辑
这个客户就是上帝的年代里一个好的用户体验比实用的功能要得民心,上传大文件时长期的白屏自己看着都烦。何况是吊的不能再吊甲方。
借用jquery.from.js插件实现异步无刷新上传文件。话说如果是自己去实现的话太麻烦了,这不是重点、重点是我不会。
工具:Jquery.js 、 jquery.form.js
思路:aspx页面ajax提交文件给后台ashx处理保存,处理后返回给前天一个处理结果。
详细:前台使用html两个控件:一个是button另一个当然是丑到爆的file
1、拖入必须的两个控件
<form id="fm1" method="post">
<input type="file" id="btnfile" value="提交" />
<input type="button" id="btn" value="上传" />
</form>
2、 编写JQuery,给button绑定当定单击事件
$(function () { // 页面加载完后触发
$("#btn").click(function () { // id为btn的按钮绑定单击事件
$("#fm1").ajaxSubmit({
url: "UploadFileHandler.ashx",
type: "post",
success: function (data) {
alert(data);
}
});
});
})
3、后台ashx处理文件并保存
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
// 获取上传的文件的对象
HttpPostedFile img = context.Request.Files["btnfile"];
// 获取上传文件的名称
string s = img.FileName;
// 截取获得上传文件的名称(ie上传会把绝对路径也连带上,这里只得到文件的名称)
string str = s.Substring(s.LastIndexOf("\\") + 1);
string path = "~/UploadFiles/" + str;
// 保存文件
img.SaveAs(context.Server.MapPath(path));
// HttpRuntime.AppDomainAppVirtualPath主要是获取应用程序虚拟路径名称,因为响应给页面时不会自动添加而导致无法显示图片
//context.Response.Write(HttpRuntime.AppDomainAppVirtualPath + path.Substring(1));//path.Substring(1)用来去除第一个~字符
context.Response.Write("提示:文件上传成功!");
}
4、到此为止就可以实现异步上传了,但是你会发现上传4M以上的文件就会出错。所以还需要在配置文件中修改一下文件最大值以及响应时间。
<httpRuntime targetFramework="4.5" maxRequestLength="1048576" executionTimeout="3600" />
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1