62,046
社区成员
发帖
与我相关
我的任务
分享
if (File.Exists(filepath))
{
string filename = strFileName;
System.IO.FileInfo file = new FileInfo(filepath);
FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);//file.Create();
BinaryReader br = new BinaryReader(fs);
if ((int)fs.Length==0)
{
this.Page.ClientScript.RegisterStartupScript(this.GetType(), "str", "<script>alert(\"文件不存在!!\")</script>");
return;
}
byte[] byteTemp = br.ReadBytes((int)fs.Length);
fs.Close();
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.Clear();
Encoding code = Encoding.GetEncoding("gb2312");
response.ContentEncoding = code;
response.HeaderEncoding = code;
string SufName=string.Empty;
SufName=GetSufName(filename);
if (SufName == "tif")
{
response.AddHeader("Content-Type", "image/tiff");
}
else if (SufName == "txt")
{
response.AddHeader("Content-Type", "text/plain");
}
else if (SufName == "doc")
{
response.AddHeader("Content-Type", "application/msword");
}
else if (SufName == "rar")
{
response.AddHeader("Content-Type", "application/octet-stream");
}
else
{
response.AddHeader("Content-Type", "application/octet-stream");
}
if (Request.QueryString["LoadType"].ToString() == "download" )
{
response.AppendHeader("Content-Disposition",
"attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8) + "; size=" + byteTemp.Length.ToString());
}
else {
response.AppendHeader("Content-Disposition",
"inline; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8) + "; size=" + byteTemp.Length.ToString());
}
response.Flush();
response.BinaryWrite(byteTemp);
response.Flush();
response.End();
}
else
{
Response.Write("<script>alert('附件所对应的物理文件已经在应用程序外被删除!')</script>");
Response.Write("<script>window.history.back()</script>");
}
类似问题:我的只有在tif文件格式的时候出现 迅雷弹出. 目前使用的方法“不监视网站"。可以考虑直接在程序里面修改迅雷设置,如ie加载项里面去掉或者把烦人的迅雷屏蔽。
用文件流
/// <summary>
/// 指定要下载文件的虚拟路径及文件名
/// </summary>
/// <param name="FileName"></param>
public void downloadfile(string FileName)
{
//打开要下载的文件
System.IO.FileStream r = new System.IO.FileStream(Server.MapPath(FileName), System.IO.FileMode.Open);
//设置基本信息
Response.Buffer = false;
Response.AddHeader("Connection", "Keep-Alive");
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + System.IO.Path.GetFileName(FileName));
Response.AddHeader("Content-Length", r.Length.ToString());
while (true)
{
//开辟缓冲区空间
byte[] buffer = new byte[1024];
//读取文件的数据
int leng = r.Read(buffer, 0, 1024);
if (leng == 0)//到文件尾,结束
break;
if (leng == 1024)//读出的文件数据长度等于缓冲区长度,直接将缓冲区数据写入
Response.BinaryWrite(buffer);
else
{
//读出文件数据比缓冲区小,重新定义缓冲区大小,只用于读取文件的最后一个数据块
byte[] b = new byte[leng];
for (int i = 0; i < leng; i++)
b[i] = buffer[i];
Response.BinaryWrite(b);
}
}
r.Close();//关闭下载文件
Response.End();//结束文件下载
}