[轉]ASP.NET解決網頁下載檔案過大的問題,使用stream方式下載 :十一的部落:Xuite日誌
  • yan.kee
  • 文章分類
  • 最新文章
  • 我的發燒文
  • 累積 | 今日
    loading......
  • 搜尋文章
  • 關鍵字
  • 最愛連結
  • BLOG玩意兒
  • 最新回應
  • Re:只能在執行 Render() 的過程中調用 RegisterForEventValidation,by(11)於2008-07-03
    Re:[轉]自動清除7天以上的檔案 ,by(haoming)於2008-06-13
    Re:[kuso]尿布舞,by(11)於2008-05-18
    Re:[kuso]尿布舞,by(seth)於2008-05-18
    Re:C#中產生GUID,by(yankee)於2008-02-17
    Re:C#中產生GUID,by(jimmy)於2008-02-16
    Re:開發excel 問題討論串,by(11)於2008-02-02
    Re:Connection Strings 討論串,by(11)於2008-01-27
    Re:SQL 分頁,by(11)於2008-01-25
    Re:開發excel 問題討論串,by(11)於2008-01-16
  • 參觀人氣統計
  • 誰拜訪過我
  • 活動
  • 到台灣玩不帶走一張發票
    ===訪客來自===
    Locations of visitors to this page
    2008-05-07 09:27 [轉]ASP.NET解決網頁下載檔案過大的問題,使用stream方式下載
  • ?
  • .net文章
  • 好文轉寄
  • 平均分數:0 顆星    投票人數:0
    我要評分:
    標籤 : 


     

    一般下載檔案都會用Response.WriteFile(FullName)

    這樣會造成 Aspnet_wp.exe 暫存了太大空間而導致下載失敗,建議採用stream方式下載

    asp.net(c#)

    部分程式碼

        System.IO.Stream iStream = null;

            //以10K為單位暫存:
            byte[] buffer = new Byte[10000];

            int length;

            long dataToRead;

            // 制定文件路徑.
            string filepath = Server.MapPath("~/aaa.rar");

            //  得到文件名.
            string filename = System.IO.Path.GetFileName(filepath);

            try
            {
                // 打開文件.
                iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
                            System.IO.FileAccess.Read, System.IO.FileShare.Read);


                // 得到文件大小:
                dataToRead = iStream.Length;

                Response.ContentType = "application/x-rar-compressed";
                Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename));

                while (dataToRead > 0)
                {
                    //保証client連接
                    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)
            {
                // error
                Response.Write("Error : " + ex.Message);
            }

            finally
            {
                if (iStream != null)
                {
                    //關閉文件
                    iStream.Close();
                }

            }

    from:  F6 TEAM



    yan.kee / Xuite日誌 / 回應(0) / 引用(0) / 好文轉寄
  • 回應