一般做下载文件的时候,直接用文件的路径作为文件名连接的url,点击该文件名的时候,就可以下载文件,这个是最简单的实现的文件下载的方法
这样实现文件的下载存在的问题
1、如果是图片,点击文件名的时候,会直接打开图片
2、不能灵活修改下载弹出框中显示的文件名
所以为了解决上述的问题,需要自己下个下载文件的函数,示例代码如下
前台代码
后台的代码
<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