asp.net 下实现文件上传进度条(IHttpModule)
本文将探讨asp.net下实现文件上穿进度条的方法。
一般情况下,要实现上传进度条首先要实现上传文件分块读取,而默认情况下,iis将直接把上传的文件一次读入到内存中,所以本处的难点在于拦截iis的文件上传过程,转而自己的实现方式。所以,我们可以实现一个IHttpModule来处理上传过程。具体的过程是Application_BeginRequest下得到当前的HttpWorkRequest,然后通过这个对象来得到当前请求的类型,长度。具体方法请查看类的实现代码(该类来自于互联网)。
由于在类中已经有比较完整的注释,所以我只介绍一个流程,没有涉及到具体的方法。
我们可以知道,如果我们取得了总的长度,那我们就可以设置一个固定的长度(比如1024字节),然后设置一个循环来每次读取这些数据,这样,我们就可以得到当前总共读取的内容长度。那页面上如何得到当前的进度呢?利用appliaction对象来存储数据,这样,前台的页面也可以使用application来得到当前的进度。因为application要使用一个键来确定是哪次的数据,常用的方法是,ihttpmodule中通过request来取得这次的键值,而上传文件也同样拥有这样一个键值。因此在upload.aspx中的page_load中需要:
this.UploadID = this.Request["UploadID"];
if (this.UploadID == null)
this.Response.Redirect("~/user/uploadphotos.aspx?UploadID=" + Guid.NewGuid().ToString()+
"&itemid="+this.itemid.ToString (), true);
如果第一次进入,就重新转发到这张页面,并给他一个uploadid,同时在HttpUploadModule中:
string uploadId = app.Request.QueryString["UploadID"];//同步取得这个uploadid
那如何来实时读取这个数据并显示在页面中呢?
我们可以在upload.aspx中使用xmlhttp去循环请求一个progress.aspx(这个页面来读取application中的数据)。
当然,在asp.net中我们还可以使用asp.net ajax来实现这一过程,具体方法是:
建立一个webservices来读取application中的数据;
在ajax中来访问这个service;
如下webservices端代码:
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using adow.adup.
相关文档:
ASP.NET 2.0
文件1: Deafault.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
&l ......
数据绑定控件比较(Reapter\DataList\GridView\DatailsView\FormView):
1.插入功能方面:
DetailsView和FormView具有插入功能,其它控件没有
2.模板
DataList\FormView\Repeater三种必须编辑模板,而
GridView和DetailsView只有在将列转换成模板列以后才会出现各种模板.
3.自动分页功能
GridView ,DetailsView和FormView ......
1. 打开新的窗口并传送参数:
传送参数:
response.write("<script>window.open(’*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="+...+"’)</script>")
接收参数:
string a = Request.QueryString("id");
string b = Request.QueryString("id1");
2.为按钮添加对话框
Button1 ......
1. 适当使用UpdatePanel
2. 利用WebService方法动态生成用户控件的内容,避免UpdatePanel回传造成的性能损失(ViewState)
3. ToolkitScriptManager代替ScriptManager
4. <asp:ScriptManager runat="server" ID="sm" ScriptMode="Release" EnablePartialRendering="false"
......
发送端以163为例
一、asp.net版 using System.Web.Mail; //命名空间引用
c#
MailMessage mail = new MailMessage();
mail.To = "shadow103@qq.com"; //接受人的邮箱
& ......