我在服务器上保存了一个Excel文档,我需要将有对文档的下载功能,我以前写的这个方法在别的地方没有问题,但是移植的时候在 Response.End();出现异常了,“ Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack”,大侠指点下 public void download()
{
string fileName = "RawData" + ".xls";
//清空输出流
Response.Clear();
//在http头中加入文件名信息
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
//定义输出流为mime类型为
Response.ContentType = "application/x-xls";
//从磁盘中读取文件
string FileFolder = Server.MapPath("Excel File");
System.IO.FileStream fs = System.IO.File.OpenRead(FileFolder + "\\" + fileName);
//定义缓冲区大小
byte[] buffer = new byte[1024];
//第一次读取
int i = fs.Read(buffer, 0, buffer.Length);
//如果读取的字节大于0,则使用binaryWrite()不断向客户端输出文件流
while (i > 0)
{
Response.BinaryWrite(buffer);
i = fs.Read(buffer, 0, buffer.Length);
}
//关闭磁盘文件流
fs.Close();
//关闭输出流
Response.End();
}
{
string fileName = "RawData" + ".xls";
//清空输出流
Response.Clear();
//在http头中加入文件名信息
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
//定义输出流为mime类型为
Response.ContentType = "application/x-xls";
//从磁盘中读取文件
string FileFolder = Server.MapPath("Excel File");
System.IO.FileStream fs = System.IO.File.OpenRead(FileFolder + "\\" + fileName);
//定义缓冲区大小
byte[] buffer = new byte[1024];
//第一次读取
int i = fs.Read(buffer, 0, buffer.Length);
//如果读取的字节大于0,则使用binaryWrite()不断向客户端输出文件流
while (i > 0)
{
Response.BinaryWrite(buffer);
i = fs.Read(buffer, 0, buffer.Length);
}
//关闭磁盘文件流
fs.Close();
//关闭输出流
Response.End();
}
画面代码using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using System.Reflection;
using System.Diagnostics;public partial class WebForms_Hospital_Default :PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
try
{
string strPath = Request["Path"].ToString().Trim();
DownloadFile(Page.Response, strPath);
}
catch (Exception ex)
{
this.ShowMessage(ex.Message);
}
} #region 下载服务器上的文件
/// <summary>
/// 下载服务器上的文件
/// </summary>
/// <param name="PageResponse">程序中可以设置参数:HttpResponse ht=Page.Response;</param>
/// <param name="serverPath">服务器上的文件路径</param>
public void DownloadFile(HttpResponse response, string serverPath)
{
FileStream fs = null;
try
{
fs = File.OpenRead(serverPath);
byte[] buffer = new byte[1024];
long count = 1024;
response.Buffer = true;
response.AddHeader("Connection", "Keep-Alive");
response.ContentType = "application/octet-stream";
response.AddHeader("Content-Disposition", "attachment;filename=" + Path.GetFileName(serverPath));//下载时要保存的默认文件名
response.AddHeader("Content-Length", fs.Length.ToString());
while (count == 1024)
{
count = fs.Read(buffer, 0, 1024);
response.BinaryWrite(buffer);
}
}
catch
{
}
finally
{
fs.Close();
}
}
#endregion
}