文件下载时遇到的问题

吃草的猪 2003-09-15 07:45:26
我使用以下语句实现了一个下载功能:
//开始下载
FileStream myFile = File.OpenRead(Str_Now);
byte[] fileCont = new byte[myFile.Length];
myFile.Read(fileCont,0,(int)myFile.Length);
Page.Response.Clear();
Page.Response.AddHeader( "Content-Type", "application/vnd.ms-excel" );
Page.Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(Str_Old,System.Text.Encoding.UTF8));

Page.Response.AddHeader("Content-Length", myFile.Length.ToString());
Page.Response.BinaryWrite(fileCont);
Page.Response.End();

下载是正常的。可是下载完以后页面上的其他连接就忽然失效了,这是怎么回事啊,应该怎么解决呢?
谢谢
...全文
60 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
phisoft 2004-02-24
  • 打赏
  • 举报
回复

Public Function DownloadFile(ByVal refPage As System.Web.UI.Page, ByVal _FilePath As String, ByVal _FileName As String) As Boolean
Try
Dim MyContentType As String = ""
Select Case _FileName.Substring(_FileName.LastIndexOf("."), 4)
Case ".xls"
MyContentType = "application/vnd.ms-excel"
Exit Function
Case ".doc"
MyContentType = "application/msword"
Exit Function
' case ".htm":
' MyContentType = "text/html";
' break;
Case Else
MyContentType = "application/zip"
Exit Function
End Select
Dim fs As System.IO.FileStream = System.IO.File.OpenRead(_FilePath)
Dim FileData() As Byte = New Byte( fs.Length ) {}
fs.Read(FileData, 0, CType(fs.Length, Integer))
refPage.Response.Clear()
refPage.Response.AddHeader("Content-Type", MyContentType)
Dim FileName As String = System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(_FileName))
refPage.Response.AddHeader("Content-Disposition", "inline;filename="+ System.Convert.ToChar(34) + FileName + System.Convert.ToChar(34))
refPage.Response.AddHeader("Content-Length",fs.Length.ToString())
refPage.Response.BinaryWrite(FileData)
fs.Close()
System.IO.File.Delete(_FilePath)
refPage.Response.End()
Return True
Catch e As Exception
System.Web.HttpContext.Current.Response.Write(e.ToString())
Return False
End Try
End Function

phisoft 2004-02-24
  • 打赏
  • 举报
回复
study
zmy0611 2004-02-20
  • 打赏
  • 举报
回复
微軟的MVP果然夠厲害, 我在這裡也多謝了
gOODiDEA 2003-09-16
  • 打赏
  • 举报
回复
对,同意三山,你有设smartNavigation为True吗?如果设了就得改回来
asam2183 2003-09-16
  • 打赏
  • 举报
回复
将页面的smartNavigation设为false试试
速马 2003-09-16
  • 打赏
  • 举报
回复
帮忙顶~~
吃草的猪 2003-09-16
  • 打赏
  • 举报
回复
谢谢gOODiDEA(无语) ,用了这个方法果然就可以了。真不愧是微软的MVP啊。
再次感谢。同时也谢谢那些帮我UP的朋友。
结贴。
吃草的猪 2003-09-16
  • 打赏
  • 举报
回复
to:gOODiDEA(无语)
我改成下面这样子还是不行:(

FileStream myFile = File.OpenRead(Str_Old);
byte[] fileCont = new byte[myFile.Length];
myFile.Read(fileCont,0,(int)myFile.Length);
Page.Response.Clear();
Page.Response.AddHeader( "Content-Type", "application/zip" );
Page.Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(Str_Old,System.Text.Encoding.UTF8));

Page.Response.AddHeader("Content-Length", myFile.Length.ToString());
Page.Response.BinaryWrite(fileCont);
myFile.Close();
Page.Response.End();
changjunwen 2003-09-16
  • 打赏
  • 举报
回复
gz
gOODiDEA 2003-09-16
  • 打赏
  • 举报
回复
try

application/vnd.ms-excel

-->

application/zip

myFile.Close();
Page.Response.End();
吃草的猪 2003-09-16
  • 打赏
  • 举报
回复
有没有人来帮我看看啊?
heavenknowwho 2003-09-16
  • 打赏
  • 举报
回复
Up以下
gOODiDEA 2003-09-16
  • 打赏
  • 举报
回复
你试试我的这个方法:

public bool DownloadFile( System.Web.UI.Page refPage, string _FilePath, string _FileName )
{
try
{
string MyContentType = "";
switch ( _FileName.Substring( _FileName.LastIndexOf( "." ), 4 ) )
{
case ".xls":
MyContentType = "application/vnd.ms-excel";
break;
case ".doc":
MyContentType = "application/msword";
break;
// case ".htm":
// MyContentType = "text/html";
// break;
default:
MyContentType = "application/zip";
break;
}
System.IO.FileStream fs = System.IO.File.OpenRead( _FilePath );
byte[] FileData = new byte[ fs.Length ];
fs.Read( FileData, 0, ( int ) fs.Length );
refPage.Response.Clear();
refPage.Response.AddHeader( "Content-Type", MyContentType );
string FileName = System.Web.HttpUtility.UrlEncode( System.Text.Encoding.UTF8.GetBytes( _FileName ) );
refPage.Response.AddHeader("Content-Disposition", "inline;filename="+ System.Convert.ToChar(34) + FileName + System.Convert.ToChar(34) );
refPage.Response.AddHeader("Content-Length", fs.Length.ToString() );
refPage.Response.BinaryWrite( FileData );
fs.Close();
System.IO.File.Delete( _FilePath );
refPage.Response.End();
return true;
}
catch( Exception e )
{
System.Web.HttpContext.Current.Response.Write( e.ToString() );
return false;
}
}


调用方法:
确保你的C盘有1.txt文件
DownloadFile( this, "C:\\1.txt", "测试.txt" );
xqinger 2003-09-16
  • 打赏
  • 举报
回复
帮忙你……up
吃草的猪 2003-09-16
  • 打赏
  • 举报
回复
再次UP
吃草的猪 2003-09-16
  • 打赏
  • 举报
回复
up..........................
吃草的猪 2003-09-16
  • 打赏
  • 举报
回复
to asam2183(三山)
还是一样的效果,没有用啊。。。。。。。。。
xqinger 2003-09-16
  • 打赏
  • 举报
回复
up…………
asam2183 2003-09-16
  • 打赏
  • 举报
回复
试试:
Response.AppendHeader("Content-Disposition","attachment; filename="+HttpUtility.UrlEncode(scFileName,System.Text.Encoding.UTF8));
Response.WriteFile(filePath);
Response.End();
吃草的猪 2003-09-16
  • 打赏
  • 举报
回复
我查了Page.Response.End();的属性。他执行以后的效果是停止该页面上的所有输出内容,并同时触发Application_EndRequest事件。
这说明他执行了以后页面确实不再响应操作了。难道其他人没有遇到过这个问题吗???
真实奇怪了。
加载更多回复(6)

62,074

社区成员

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

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

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

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