.net中如何通过gridview跳转页面来实现下载功能

 我来答
张国强_stu
2011-05-05
知道答主
回答量:11
采纳率:0%
帮助的人:7.4万
展开全部
<asp:TemplateField HeaderText="操作" ItemStyle-HorizontalAlign=Center>
<ItemTemplate>
<asp:LinkButton ID="lbtnDownLoad" runat="server" CommandName="DownLoad" CommandArgument="<%# Bind('文件的虚拟路径') %>" Text="打开" />
</ItemTemplate>
</asp:TemplateField>

在gridview的RowCommand事件中
string rowId = e.CommandArgument.ToString();
case "DownLoad":
this.DownLoad(rowId);
break;

下载函数:
private void DownLoad(string rowId)
{
rowId = rowId.Trim().Replace("/", "/");
string fileName = HttpContext.Current.Server.UrlEncode(rowId.Trim());
string filePath = HttpContext.Current.Server.MapPath(" "+rowId);
//指定块大小
long chunkSize = 102400;
//建立一个100K的缓冲区
byte[] buffer = new byte[chunkSize];
//已读的字节数
long dataToRead = 0;
FileStream stream = null;
try
{
//打开文件
stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
dataToRead = stream.Length;

//添加Http头
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachement;filename=" + fileName);
Response.AddHeader("Content-Length", dataToRead.ToString());

while (dataToRead > 0)
{
if (Response.IsClientConnected)
{
int length = stream.Read(buffer, 0, Convert.ToInt32(chunkSize));
Response.OutputStream.Write(buffer, 0, length);
Response.Flush();
Response.Clear();
dataToRead -= length;
}
else
{
//防止client失去连接
dataToRead = -1;
}
}
}
catch (Exception ex)
{
Response.Write("Error:" + ex.Message);
}
finally
{
if (stream != null)
{
stream.Close();
}
Response.Close();
}
}

ok了
hexiannian1987
2011-05-05 · 超过28用户采纳过TA的回答
知道答主
回答量:145
采纳率:0%
帮助的人:98.9万
展开全部
使用JS window.OPEM(文件地址);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
绝妙又坚韧的白桦6684
2011-05-05
知道答主
回答量:10
采纳率:0%
帮助的人:4.3万
展开全部
第二个回答不错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式