c# 实现下载文件

一般做下载文件的时候,直接用文件的路径作为文件名连接的url,点击该文件名的时候,就可以下载文件,这个是最简单的实现的文件下载的方法

<a href="relatefilePath">fileName</a>

这样实现文件的下载存在的问题
1、如果是图片,点击文件名的时候,会直接打开图片
2、不能灵活修改下载弹出框中显示的文件名
所以为了解决上述的问题,需要自己下个下载文件的函数,示例代码如下
前台代码

<asp:LinkButton ID="lbtnDownload" runat="server" CommandArgument='<%#Eval("ID") %>' OnCommand="downloadAttachment">下载附件</asp:LinkButton>

后台的代码

#region 下载附件

protected void downloadAttachment(object sender, CommandEventArgs e)
{
int attaID = DataTypeConvert.ConvertToInt(e.CommandArgument.ToString());

Mail mail = new Mail();

DataSet attaDS = mail.GetAttachmentsByID(attaID);
if (attaDS.Tables[0].Rows.Count > 0)
{
string fileName = attaDS.Tables[0].Rows[0]["Name"].ToString();

WebClient webClient = new WebClient();
byte[] responseData;

//提交请求并取得结果
try
{
string filePath = attaDS.Tables[0].Rows[0]["Url"].ToString();
filePath = Server.MapPath(filePath);
responseData = webClient.DownloadData(filePath);//注意这里的参数用的是绝对的路径,而不是相对的路径
}
catch
{
this.lblError.Text = "<br /><font color='red'>下载的附件不存在,可能被删除了!</font>";
return;
}

//输出二进制流
Response.Clear();
Response.ClearHeaders();
Response.Buffer = false;
Response.ContentType = attaDS.Tables[0].Rows[0]["Type"].ToString();
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.AppendHeader("Content-Length", responseData.Length.ToString());
Response.BinaryWrite(responseData);
Response.Flush();
Response.End();
}
}

#endregion
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值