直接使用超链接的方式进行文件下载,会出现如同txt,以及一些图片格式的文件不能直接下载,而是在浏览器中直接打开,那么如果想将所有格式的文件进行下载的话,如下所示:
前台代码:
<asp:Repeater ID="rptFile" runat="server" OnItemCommand="rptFile_ItemCommand">
<HeaderTemplate>
<table cellpadding="0" cellspacing="0">
</HeaderTemplate>
<ItemTemplate>
<tr>
<td height="25">
<%#Eval("AttaNames")%>
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="download" CommandArgument='<%# Eval("AttaNames") %>'
class="delete">下载</asp:LinkButton>
<%-- <a href='../UploadFile/<%#Eval("AttaNames")%>'>下载</a>--%>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
此代码中不能出现 <%-- <asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>--%>
另外必须有 <asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
后台代码:
protected void rptFile_ItemCommand(object source, RepeaterCommandEventArgs e)
{
string AttaName = e.CommandArgument.ToString();
if (e.CommandName == "download")
{
string fileName = AttaName;//客户端保存的文件名
string filePath = Server.MapPath("../UploadFile/Project/" + AttaName);//路径
//以字符流的形式下载文件
FileStream fs = new FileStream(filePath, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}
}