我做一个资源下载站点,资源文件是放在其他目录的,而管理下载的页面是down.aspx当用户通过验证后,就用server.transfer(filepath) (为了隐藏路径)可是down.aspx和资源文件好像必须在同一个目录下才能用,而我的文件是按分类存放的,怎么办呢
而我用下面的代码时,一下载几次,服务器好像就打不开down.aspx的页面了,请高手指导FileStream fs=null; // 10K分块读取
byte[] buffer = new Byte[10000]; // 文件长度
long filelen; //文件已读取
int fileread;
try
{
// 打开文件
fs = new FileStream(filepath, FileMode.Open,FileAccess.Read,FileShare.Read); // 文件长度
filelen = fs.Length; Response.ContentType="application/octet-stream";
Response.AddHeader ("Content-Disposition", "attachment; filename="+filename+";charset=GB2312"); // 当前文件长度
while (filelen > 0)
{
// 客户端是否已连接
if (Response.IsClientConnected)
{
// 读取数据到缓存
fileread = fs.Read(buffer, 0, 10000); //写入数据到客户端
Response.OutputStream.Write(buffer, 0, fileread); // Flush the data to the HTML output.
Response.Flush(); buffer= new Byte[10000]; filelen = filelen - fileread;
}
else
{
//连接丢失
filelen = -1;
}
}
}
catch
{
// 错误捕捉
Response.Write("下载失败!");
}
finally
{
if (fs != null)
{
//关闭文件
fs.Close();
}
}
而我用下面的代码时,一下载几次,服务器好像就打不开down.aspx的页面了,请高手指导FileStream fs=null; // 10K分块读取
byte[] buffer = new Byte[10000]; // 文件长度
long filelen; //文件已读取
int fileread;
try
{
// 打开文件
fs = new FileStream(filepath, FileMode.Open,FileAccess.Read,FileShare.Read); // 文件长度
filelen = fs.Length; Response.ContentType="application/octet-stream";
Response.AddHeader ("Content-Disposition", "attachment; filename="+filename+";charset=GB2312"); // 当前文件长度
while (filelen > 0)
{
// 客户端是否已连接
if (Response.IsClientConnected)
{
// 读取数据到缓存
fileread = fs.Read(buffer, 0, 10000); //写入数据到客户端
Response.OutputStream.Write(buffer, 0, fileread); // Flush the data to the HTML output.
Response.Flush(); buffer= new Byte[10000]; filelen = filelen - fileread;
}
else
{
//连接丢失
filelen = -1;
}
}
}
catch
{
// 错误捕捉
Response.Write("下载失败!");
}
finally
{
if (fs != null)
{
//关闭文件
fs.Close();
}
}
解决方案 »
- 为什么后台通过delegate无法将数据显示到前台web控件
- HTML中的换行在浏览器中都解析成一个空格了
- 如何将字符串得到控件id
- 初学Web应用,问个HTTP和PAGE的问题
- jquery判断,求告诉解答下。急
- vs2005/2008中提供的各种大控件大家都用吗(如导航,验证)?
- ASP.NET from 问题;
- 在VS2010中将公司项目映射到本机上,但是映射下来后缺少bin文件
- webpart的使用问题
- 如何设置当前页面的得到焦点的textbox的值?
- <%#DataBinder.Eval(Container.DataItem,"sendtime")%>的显示问题
- 你们谁有csdn论坛帖子的样式表啊,类似的也可以?
/// <summary>
/// 方法编号:06
/// 方法名称:DownFile
/// 内容摘要:提示用户导出的文件是打开还是保存
/// </summary>
/// <param name="Response">输出流对象</param>
/// <param name="fileName">下载的默认文件名</param>
/// <param name="fullPath">文件的全路径包括文件名</param>
private static bool DownFile(System.Web.HttpResponse Response,string fileName,string fullPath)
{
try
{
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition","attachment;filename=" +
HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8) + ";charset=GB2312");
System.IO.FileStream fs= System.IO.File.OpenRead(fullPath);
long fLen=fs.Length; //每100K同时下载数据
int size=102400; //指定缓冲区的大小
byte[] readData = new byte[size]; //如果每次下载的数据大于文件的大小,改变下载数据大小为文件的大小
if(size > fLen)
{
size=Convert.ToInt32(fLen);
} long fPos=0;
bool isEnd=false; //读文件
while (!isEnd)
{
if((fPos+size)>fLen)
{
size=Convert.ToInt32(fLen-fPos);
readData = new byte[size];
isEnd=true;
} //读入一个压缩块
fs.Read(readData, 0, size);
Response.BinaryWrite(readData);
fPos+=size;
}
fs.Close();
//将服务器上的文件删除
System.IO.File.Delete(fullPath);
return true;
}
catch
{
return false;
}
}