<system.web>
<httpModules>
<add name="UploadModule" type="Bestcomy.Web.Controls.Upload.UploadModule,Bestcomy.Web.Controls.Upload" />
</httpModules>
<httpHandlers>
<add verb="*" path="download.aspx" type="EPWeb.TrafficConfig.DownloadHandler,EPWeb"/>
</httpHandlers>
<httpRuntime maxRequestLength="40000" useFullyQualifiedRedirectUrl="true" executionTimeout="450"/>
调用代码:
using Bestcomy.Web.Controls.Upload;

private void Page_Load(object sender, System.EventArgs e)

...{
AspnetUpload upldr = new AspnetUpload();
// upldr.RegisterProgressBar("ProgressBar.aspx",btn_upload);
// upldr.RegisterProgressBar(btn_upload);
// upldr.RegisterModelessProgressBar("ProgressBar.aspx",btn_upload);
upldr.RegisterModelessProgressBar(btn_upload);
string fpath = Path.Combine(Server.MapPath("."),"Upload");
if(!Directory.Exists(fpath))
Directory.CreateDirectory(fpath);
upldr.set_UploadFolder(fpath);
}

private void btn_upload_Click(object sender, System.EventArgs e)

...{
AspnetUpload upldr = new AspnetUpload();
StringBuilder sb = new StringBuilder();
foreach(UploadFile file in upldr.GetUploadFiles("file1"))

...{
if(file != null)

...{
string fpath = Path.Combine(Server.MapPath("."),"Upload");
fpath = Path.Combine(fpath,Path.GetFileName(file.get_FileName()));
file.SaveAs(fpath);
sb.Append("<strong>已录入文件:</strong> ");
string url = QueryFilename.EncryptFilename(Path.GetFileName(file.get_FileName()));
sb.Append(""+Path.GetFileName(file.get_FileName())+" ["+file.get_ContentLength().ToString("###,###")+" Bytes]"+"<br>");//<a href="download.aspx?filename="+url+"" target="_blank"></a>
sb.Append("</div>");
Label1.Text=sb.ToString();


} //if
}//foreach
}

下面是一下下载类。
using System;
using System.Web;

namespace EPWeb.TrafficConfig

...{

/**//// <summary>
/// DownloadHandler class for large file download.
/// </summary>
public class DownloadHandler : IHttpHandler

...{
public DownloadHandler()

...{
}

// Override the ProcessRequest method.
public void ProcessRequest(HttpContext context)

...{
HttpResponse Response = context.Response;
HttpRequest Request = context.Request;


System.IO.Stream iStream = null;

// Buffer to read 10K bytes in chunk:
byte[] buffer = new Byte[10240];

// Length of the file:
int length;

// Total bytes to read:
long dataToRead;

try

...{
// Identify the file name.
string filename = QueryFilename.DecryptFilename(Request["filename"]);

// Identify the file to download including its path.
string filepath = System.IO.Path.Combine(HttpContext.Current.Server.MapPath("."),"Upload\"+filename);

// Open the file.
iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
System.IO.FileAccess.Read,System.IO.FileShare.Read);
Response.Clear();

// Total bytes to read:
dataToRead = iStream.Length;

long p = 0;
if(Request.Headers["Range"]!=null)

...{
Response.StatusCode = 206;
p = long.Parse( Request.Headers["Range"].Replace("bytes=","").Replace("-",""));
}
if(p != 0)

...{
Response.AddHeader("Content-Range","bytes " + p.ToString() + "-" + ((long)(dataToRead - 1)).ToString() + "/" + dataToRead.ToString());
}
Response.AddHeader("Content-Length",((long)(dataToRead-p)).ToString());
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(System.Text.Encoding.GetEncoding(65001).GetBytes(filename)));
// Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(filename)));

iStream.Position = p;
dataToRead = dataToRead - p;
// Read the bytes.
while (dataToRead > 0)

...{
// Verify that the client is connected.
if (Response.IsClientConnected)

...{
// Read the data in buffer.
length = iStream.Read(buffer, 0, 10240);

// Write the data to the current output stream.
Response.OutputStream.Write(buffer, 0, length);

// Flush the data to the HTML output.
Response.Flush();

buffer= new Byte[10240];
dataToRead = dataToRead - length;
}
else

...{
//prevent infinite loop if user disconnects
dataToRead = -1;
}
}
}
catch (Exception ex)

...{
// Trap the error, if any.
Response.Write("Error : " + ex.Message);
}
finally

...{
if (iStream != null)

...{
//Close the file.
iStream.Close();
}
Response.End();
}
}

// Override the IsReusable property.
public bool IsReusable

...{

get ...{ return true; }
}
}
}


下面是一个加密文件名的类
using System;
using System.Web;

namespace EPWeb.TrafficConfig

...{

/**//// <summary>
/// QueryFilename class.
/// </summary>
public class QueryFilename

...{
private QueryFilename()

...{
}

public static string EncryptFilename(string filename)

...{
byte[] buffer = HttpContext.Current.Request.ContentEncoding.GetBytes(filename);
return HttpUtility.UrlEncode(Convert.ToBase64String(buffer));
}

public static string DecryptFilename(string encryptfilename)

...{
byte[] buffer = Convert.FromBase64String(encryptfilename);
return HttpContext.Current.Request.ContentEncoding.GetString(buffer);
}
}
}
转载于:https://www.cnblogs.com/caoleihao/archive/2007/12/28/1018419.html