.net 下载功能问题

黑桃貳 2010-04-28 04:58:22
现在我实现了下载功能 可以用电脑自带的下载提示框下载;但是只能下载一次就结束foreach循环了,求高手指教!

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
try
{
string id = GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[0].Text.ToString();

//遍历文件夹里面的所有文件
string xlspath = string.Empty;
string packagePath1 = Server.MapPath("../file/" + GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[1].Text.ToString());
string[] packageName = Directory.GetDirectories(packagePath1);
foreach (string s in packageName)
{
//string extention = s.Substring(s.LastIndexOf('.') + 1);
DataSet ds = DAL.SubjectDAL.getSubjectAllName();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
string spath = s.Substring(s.LastIndexOf("\\") + 1);
if (spath == ds.Tables[0].Rows[i][0].ToString())
{
xlspath = spath;
string[] packagexlsName = Directory.GetFiles(s);
foreach (string s1 in packagexlsName)
{
string extention2 = s1.Substring(s1.LastIndexOf('.') + 1);


if (extention2 == "xls" || extention2 == "xml")
{
xlspath = s1;
if (e.CommandName == "download")//下载按钮绑定的事件
{
try
{
if (xlspath == "" || xlspath == null)
{
MessageBox.Show(this.Page, "考卷信息不存在!");
return;
}
else
{
//string download = Server.MapPath(xlspath);
FileInfo info = new FileInfo(xlspath);
if (info.Exists)
{
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(info.Name));
Response.AddHeader("Content-Length", info.Length.ToString());
Response.ContentType = "application/octet-stream";
//Response.Filter.Close();
Response.WriteFile(info.FullName);
//Response.End();
}
else
{
MessageBox.Show(this.Page, "考卷信息不存在!");

}
}

}
catch
{
MessageBox.Show(this.Page, "试卷信息丢失,联系管理员!");

}
}
}

}
}
}
}
}
catch
{
MessageBox.Show(this.Page, "目标路径不存在");
}
}




/// <summary>
/// 弹出消息框
/// </summary>public class MessageBox
{
public MessageBox()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public static void Show(System.Web.UI.Page page,string strtext)
{
page.ClientScript.RegisterStartupScript(page.GetType(), "", "<script language=javascript>alert('" + strtext + "')</script>");
}
}
...全文
222 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zxl_love 的回复:]
感谢1楼 我试下
同样感谢4楼 我先前也是压缩之后再下载的但下载的是个流文件,都不能看;或者说我得不到下载之后的文件文件路径,也就解压不到指定的文件路径
[/Quote]

可以直接输出字节数组的,不一定要是媒体介质上的上的东西才能输出。
this.Response.OutputStream.Write
pcming 2010-04-28
  • 打赏
  • 举报
回复
学习学习!
lovehooho 2010-04-28
  • 打赏
  • 举报
回复
留名学习~
黑桃貳 2010-04-28
  • 打赏
  • 举报
回复
感谢1楼 我试下
同样感谢4楼 我先前也是压缩之后再下载的但下载的是个流文件,都不能看;或者说我得不到下载之后的文件文件路径,也就解压不到指定的文件路径
fwacky 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ricercar 的回复:]
我想到一个思路,把文件列表发送到客户端,在客户端用js脚本循环遍历,然后提交到服务端,服务端根据js脚本指定的文件发送文件,这样,服务端还是只发送一个文件,具体的没试过,LZ自己尝试一下吧
[/Quote]

这个思路,挺好!
他点那个,就下载那个!
「已注销」 2010-04-28
  • 打赏
  • 举报
回复
http://www.cnblogs.com/baishahe/archive/2008/02/25/1080930.html具体没有弄过,你可以尝试把要下载的文件先进行压缩成一个文件(流),然后输出到客户端。
可能涉及到的有:System.IO.Compression 命名空间

类:System.IO.Compression 命名空间包含提供基本的流压缩和解压缩服务的类。
类: DeflateStream
类:GZipStream
枚举:CompressionMode

具体
Ricercar 2010-04-28
  • 打赏
  • 举报
回复
我想到一个思路,把文件列表发送到客户端,在客户端用js脚本循环遍历,然后提交到服务端,服务端根据js脚本指定的文件发送文件,这样,服务端还是只发送一个文件,具体的没试过,LZ自己尝试一下吧
黑桃貳 2010-04-28
  • 打赏
  • 举报
回复
帮忙想个解决方法吧,我想遍历文件夹里面的文件,下载所有符合要求的文件.
Ricercar 2010-04-28
  • 打赏
  • 举报
回复
因为web服务器只能发送一次响应,因为http协议通讯都是无连接的,不可能阻塞线程

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧