![]() |
#2
烟雨袅袅2010-08-29 03:23
回复 楼主 liuran
试试看,如果有效,在这里回个贴吧
protected void ResponseFile(string path)//传入服务端文件及路径 大文件下载原理是把文件切成小段数据流下载,微软msdn给出了大文件下载的示例 { iStream = null;//声明文件流 byte[] buffer = new Byte[10000];//声明缓存区 int length;//读入缓冲区中的总字节数 long dataToRead;//剩余要传输到客户端的总字节数 string filename = (path);//获取文件名及扩展名 try { //使用指定的路径、创建模式、读/写权限和共享权限 iStream = new (path, , , ); dataToRead = iStream.Length; Response.ContentType = "application/octet-stream";//指定ContentType //Content-Disposition attachment表示以附件方式下载 HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8))解决中文乱码问题 Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8)); while (dataToRead > 0) { if (Response.IsClientConnected)//客户端是否连接 { length = iStream.Read(buffer, 0, 10000);//读取流到缓存区, Response.OutputStream.Write(buffer, 0, length);//缓存区复制到当前流 Response.Flush(); //缓冲区数据先发送到客户端 buffer = new Byte[10000]; dataToRead = dataToRead - length; } else { dataToRead = -1; } } } catch (Exception ex) { Response.Write("文件下载时出现错误!" + ex.Message); } finally { if (iStream != null) { iStream.Close(); } } } |
问题是这样的:我的下载功能如果在vs上直接浏览的话是没有问题,但是我用IIS发布以后 ,如果文件大了就不能下载了,我试了试200M以上的就不能了,也不报错,就是一直在加载网页。我怀疑是iss哪的问题可是不知道怎样解决,希望高手们的帮助?我的下载方法是这样的:
private void FileDownload(string file)
{
string fileName = file.Substring(file.LastIndexOf('/')+1);
string filePath = Server.MapPath(file);//繚噤
FileInfo fileInfo = new FileInfo(filePath);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
//Response.AddHeader("Content-Disposition", "attachment;");
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();
(DownloadFile.FullName);
Response.Flush();
Response.End();
}
web.config我是这样设置的<httpRuntime maxRequestLength="2097151" executionTimeout="120" />