这些天一直在做一个无刷新的文件上传功能,现在也总算是做好。可以说是是几经波折吧,开始一直想用AJAX的思路去实现,没想到费了很多时间最后还是徒劳!用ADODB.STREAM 应该也是可以把表单的文件POST到Httphandler中来处理,但是其中会遇到很多麻烦的事情,比如系统禁用了ADODB.DLL的,IE里面没权限访问数据等,总之很麻烦也不实用。

还是使用了将FORM提交到一个隐藏IFRAME中实现无刷新的上传文件。实现起来也非常容易,早知道的话我就直接用这种方法了,就不会浪费这么多时间。不过,我试了那么多方法也没白话时间吧,至少我知道了那样的方法是不行的!方法不是原创,很早就有人实现了,我是从网络收集的,这里贴出以作备忘及给有需要的人。下面是实现这一功能的关键代码:

HTML部分就是一个隐藏IFRAME,FORM以及INPUT

代码

<!--隐藏的iframe来接受表单提交的信息--><iframe name="hd" style="display:none;"></iframe><FORM id="Form1" method="post" action="upload.ashx" enctype="multipart/form-data" target="hd"><div id="screenshot" style="display:block; background-color:#FFFF99; position:absolute;width:350px; left:8px; bottom:137px;border:1px; border-color:Gray;border-style:solid; z-index:1;"> <input type="file" id="file1" name="upfile" size="28"/><input type="button" value="发送" onclick="return checksn();"/> </div><FORM/>

JAVASCRIPT部分:

//检查是否选择文件function checksn(){var f = document.getElementById("file1");if (f.value == '') {alert('请选择文件!'); f.focus(); return false;}else {SendFile();}}//发送文件,手动提交表单function SendFile() {var fm = document.getElementById("Form1");fm.action = "";fm.action = "upload.ashx";fm.submit();}

代码

function UpdateMsg(newfilename, filename) {//此函数用来提供给提交到的页面如upload.ashx输出js的回调,更新当前页面的信息 if (filename == '') { alert('未上传文件!'); return false; }
alert(
"上传成功 \n储存的文件名"+newfilename+" \n原文件名 "+filename);
}

服务器端upload.ashx

代码

<%@ WebHandler Language="C#" Class="upload" %>using System;using System.Web;public class upload : IHttpHandler {private string Js(string v) {//此函数进行js的转义替换的,防止字符串中输入了'后造成回调输出的js中字符串不闭合 if (v == null) return "";return v.Replace("'", @"\'");
}
//下面就是一个简单的示例,保存上传的文件,如果要验证上传的后缀名,得自己写,还有写数据库什么的 public void ProcessRequest (HttpContext context) {
HttpRequest Request
= context.Request;
HttpResponse Response
= context.Response;
HttpServerUtility Server
= context.Server;//指定输出头和编码 Response.ContentType = "text/plain";
Response.Charset
= "gb2313";

HttpPostedFile f = Request.Files["upfile"];//获取上传的文件 string oldfile = f.FileName.Substring(f.FileName.LastIndexOf("\\")+1);int len = f.ContentLength;string des = Request.Form["des"]//获取描述 ,newFileName=Guid.NewGuid().ToString();//使用guid生成新文件名 if (len > 5 * 1024 * 1024)
{
Response.Write(
"<script>alert('文件大小不能超过5MB!');</script>");//只能上传5MB以内的文件 Response.End();return;
}
if (f.FileName == "")//未上传文件 Response.Write("<script>parent.UpdateMsg('','');</script>");//输出js,使用parent对象得到父页的引用 else { //保存文件 newFileName += System.IO.Path.GetExtension(f.FileName);//注意加上扩展名 try {
f.SaveAs(Server.MapPath(
"~/UploadFile/" + newFileName));//如果要保存到其他地方,注意修改这里//调用父过程更新内容,注意要对des变量进行js转义替换,繁殖字符串不闭合提示错误 Response.Write("<script>parent.UpdateMsg('" + Js(newFileName) + "','" + oldfile + " " + len + "byte" + "')</script>");
}
catch {
Response.Write(
"<script>alert('保存文件失败!\\n请检查文件夹是否有写入权限!');</script>");//如果保存失败,输出js提示保存失败 }

}
}public bool IsReusable {get {return false;
}
}

}

转载于:https://www.cnblogs.com/sparemylife/archive/2010/05/29/1746959.html

ASP.NET 无刷新上传文件相关推荐

  1. jQuery+php+ajax实现无刷新上传文件功能

    2019独角兽企业重金招聘Python工程师标准>>> jQuery+php+ajax实现无刷新上传文件功能,还带有上传进度条动画效果,支持图片.视频等大文件上传. js代码: &l ...

  2. 利用iframe无刷新上传文件的坑

    利用iframe无刷新上传文件的坑 原文:利用iframe无刷新上传文件的坑 页面里经常要用到文件上传的功能,而且要求页面不刷新,先说一下原理:页面里放一个file控件和submit按钮,外面用for ...

  3. Sring3MVC页面无刷新上传文件

    Sring3MVC页面无刷新上传文件 首先,这个框架是利用Ajax与Ctroller进行表单提交和数据交互的,但是Ajax是无法支持File上传的,所以在这里我使用了隐藏的Iframe来做文件上传的数 ...

  4. php 无刷新上传,php 无刷新上传文件的代码

    php 无刷新上传文件. 有兴趣的朋友,可以参考下:php iframe无刷新上传文件的实现代码 . 1.上传页面 复制代码 代码示例: 无刷新上传文件 function startUpload() ...

  5. Asp.Net无刷新上传并裁剪头像

    开发网站几乎都做过上传图片并截图,做个无刷新Asp.Net上传并截图示例 实现功能: 1.选择文件,自动上传并生成缩放图(上传带进度条),形成预览图 2.在预览区,实现鼠标拖拽截图区,截取图片(示例截 ...

  6. asp实现无组件上传文件原理

    一.上传网页     上传页面代码: <form   action="upload.asp"   method="post"   enctype=&quo ...

  7. ajax页面无刷新上传文件

    最近在研究struts2文件上传,感觉这块无论是做企业网站还是做系统都用的挺多的,尤其是图片上传.但是上传我们又有几种方式,一种是表单提交,一种是ajax无刷新上传. 这次我要介绍的就是struts2 ...

  8. iframe实现页面无刷新上传文件(PHP)----备忘

    之前做一个文件上传的,由于那段时间写ajax比较多,所以就想利用Ajax来实现,后来发现,Ajax没法实现文件上传, 后来百度之,这里做个备忘. 提示:利用form表单的target属性和iframe ...

  9. 使用iframe模拟无刷新上传文件。

    最近一直在研究使用AJAX技术上传文件,也找了网上的一些源码,发现基本上都是使用iframe模拟实现的. 其实AJAX是无法实现上传文件的,那么我们该怎么实现既能不刷新当前页面,又能在用户上传文档完毕 ...

最新文章

  1. .net 匹配html图片url_后端程序员不得不会的 Nginx 转发匹配规则
  2. 我们计划招收300名学员,免费攻读人工智能专业!
  3. 将servlet数据传到html_Servlet详解(二)
  4. gvim e303 无法打开 “[未命名]“的交换文件,恢复将不可能
  5. python中的zip是什么意思_python中zip是什么函数
  6. 分布式系统关注点(20)——阻塞与非阻塞有什么区别?
  7. STM32F407 独立看门狗 个人笔记
  8. slam 无人车 融合imu 后手动调整小车位姿,不受里程计影响
  9. JavaScript基础函数的配置对象Configuration Objects(020)
  10. android串口方案:usb转串口 usb 转ttl
  11. 新基建促进智能化基础设施管控平台的搭建
  12. 实验三 译码器及其应用
  13. java中的数据结构——栈
  14. Oracle19c 出现 ora-12514
  15. Why the MonthCalendar.MinDate is 01/01/1753?
  16. python如何实现图像中特定颜色的种类识别及特定颜色的占比代码
  17. 微信公众号关注页、微信关注链接 微信7.0 IOS 安卓
  18. 2023 DiscuzX 酷二次元博客主题模板
  19. 应用MATLAB求解线性代数题目(三)——n维向量
  20. Android数据持久化保存--File

热门文章

  1. HDUOJ 不容易系列之(4)——考新郎
  2. 民生证券手机网上开户流程
  3. Knockout v3.4.0 中文版教程-14-控制文本内容和外观-style绑定
  4. jetty;linux 目录结构
  5. 设计模式03-工厂方法
  6. 一次面试留下的实际应用问题。关于HttpModule,IIS集成模式。
  7. DB2 V9 默认帐户信息和服务启动信息
  8. tnsnames.ora 监听配置文件详解
  9. 反编译Silverlight项目
  10. 有哪些关于iPhone使用的小技巧?