您的位置:首页 > 其它

利用repeater绑定下载地址并点击下载(避免中文文件名乱码)

2012-01-20 14:39 302 查看
aspx

<asp:Repeater ID="Repeater1" runat="server">

<HeaderTemplate>

<table>

<tr>

</HeaderTemplate>

<ItemTemplate>

<tr>

<td style="border: 0px;">

<a href='../download.ashx?url=<%# Server.UrlEncode(Eval

("FilePath").ToString())%>'>

<%#eval_r("FileName")%></a>

</td>

</ItemTemplate>

<FooterTemplate>

</tr></table></FooterTemplate>

</asp:Repeater>



download.ashx

using System;

using System.Collections;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;

using System.Xml.Linq;

namespace Web.UCenter

{

/// <summary>

/// $codebehindclassname$ 的摘要说明

/// </summary>

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class download : IHttpHandler

{

public void ProcessRequest(HttpContext context)

{

try

{

string path = context.Request.QueryString["url"].ToString();

System.IO.FileInfo file = new System.IO.FileInfo(path);

context.Response.Clear();

context.Response.Charset = "GB2312";

context.Response.ContentEncoding = System.Text.Encoding.UTF8;

// 添加头信息,为"文件下载/另存为"对话框指定默认文件名

context.Response.AddHeader

("Content-Disposition",

"attachment; filename="

+


System.Web.HttpUtility.UrlEncode

(file.Name,System.Text.Encoding.UTF8));// 防止中文名有乱码

// 添加头信息,指定文件大小,让浏览器能够显示下载进度

context.Response.AddHeader("Content-Length", file.Length.ToString());

//// 指定返回的是一个不能被客户端读取的流,必须被下载

//context.Response.ContentType = "application/ms-excel";

// 把文件流发送到客户端

context.Response.WriteFile(file.FullName);

// 停止页面的执行

context.Response.End();

}

catch

{

context.Response.Write("您下载的资源不存在!");

}

}

public bool IsReusable

{

get

{

return false;

}

}

}

}



注意点:我在数据库存储的文件路径是加server.map的绝对路径。实际下载的时候根据实际情况修改代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: