注册 登录
编程论坛 ASP.NET技术论坛

我的下载功能不能下载大文件

liuran 发布于 2010-08-28 16:48, 1364 次点击
问题是这样的:我的下载功能如果在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" />
4 回复
#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();
            }
        }
    }
#3
Issac_abc2010-08-31 10:41
回 烟雨袅袅  呵呵  试了下,可以的哦!
#4
冰镇柠檬汁儿2010-09-01 10:04
一次性下载过大的文件,浏览器当然不能承受,所以应该对文件进行分割下载的方式,就像2楼的那样。
#5
ytdl2010-09-03 11:50
有时空间对下载文件大小有限制,文件分卷压缩就好了
1