狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#實(shí)現(xiàn)文件下載的幾種方式

admin
2021年1月29日 9:43 本文熱度 2090

先把有問(wèn)題的代碼貼出來(lái)吧

 

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.IO;

 

namespace infoPlatClient.NetDisk

{

    public partial class downLoad : Com.DRPENG.Common.WebStruct.BaseForm

    {

 

        /// <summary>

        /// 取得要下載文件的路徑

        /// </summary>

        private string fileRpath

        {

            get

            {

                return Request["fileRpath"] == null ? "" : Request["fileRpath"];

            }

        }

        /// <summary>

        /// 取得要下載文件的名稱

        /// </summary>

      

        protected void Page_Load(object sender, EventArgs e)

        {

                if (!IsPostBack)

                this.DownloadFile();

        }

        public void DownloadFile()

        {

 

                Response.ClearHeaders();

                Response.Clear();

                Response.Expires = 0;

                Response.Buffer =true;

                Response.AddHeader("Accept-Language", "zh-tw");

                string name = System.IO.Path.GetFileName(fileRpath);

                System.IO.FileStream files = new FileStream(fileRpath, FileMode.Open, FileAccess.Read, FileShare.Read);

                byte[] byteFile=null;

                if (files.Length == 0)

                {

                    byteFile=new byte[1];

                }

                else

                {

                    byteFile = new byte[files.Length];

                }

                files.Read(byteFile, 0, (int)byteFile.Length);

                files.Close();

            

                Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(name, System.Text.Encoding.UTF8));

                Response.ContentType = "application/octet-stream;charset=gbk";

                Response.BinaryWrite(byteFile);

                Response.End();

             

        }

    }

}

 

 之前一直用這種下載方式,可是有一次用戶上傳了一個(gè)700Mb的文件時(shí)報(bào)內(nèi)存溢出的問(wèn)題,分析了一下原因,用戶的內(nèi)存只有256M,而下載文件時(shí)要?jiǎng)?chuàng)建內(nèi)存流,導(dǎo)致了內(nèi)存溢出。

 

解決方案:1>WriteFile分塊下載,就是每次下載指定數(shù)量的多件;

 

             2>通過(guò)超鏈接的方式;

 

             lblDownLoad.Text = "<a href='" + drv["VPath"].ToString() + "'>下載</a>"

 

下面是四種實(shí)現(xiàn)文件下載的方式:

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.IO;

 

public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

 

    }

 

    //TransmitFile實(shí)現(xiàn)下載

    protected void Button1_Click(object sender, EventArgs e)

    {

        /*

         微軟為Response對(duì)象提供了一個(gè)新的方法TransmitFile來(lái)解決使用Response.BinaryWrite

         下載超過(guò)400mb的文件時(shí)導(dǎo)致Aspnet_wp.exe進(jìn)程回收而無(wú)法成功下載的問(wèn)題。

         代碼如下:

         */

 

        Response.ContentType = "application/x-zip-compressed";

        Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");

        string filename = Server.MapPath("DownLoad/z.zip");

        Response.TransmitFile(filename);

    }

 

    //WriteFile實(shí)現(xiàn)下載

    protected void Button2_Click(object sender, EventArgs e)

    {

        /*

         using System.IO;

        

         */

 

        string fileName ="asd.txt";//客戶端保存的文件名

        string filePath=Server.MapPath("DownLoad/aaa.txt");//路徑

 

        FileInfo fileInfo = new FileInfo(filePath);

        Response.Clear();

        Response.ClearContent();

        Response.ClearHeaders();

        Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);

        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();

    }

 

    //WriteFile分塊下載

    protected void Button3_Click(object sender, EventArgs e)

    {

 

        string fileName = "aaa.txt";//客戶端保存的文件名

        string filePath = Server.MapPath("DownLoad/aaa.txt");//路徑

 

        System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);

 

        if (fileInfo.Exists == true)

        {

            const long ChunkSize = 102400;//100K 每次讀取文件,只讀取100K,這樣可以緩解服務(wù)器的壓力

            byte[] buffer = new byte[ChunkSize];

 

            Response.Clear();

            System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);

            long dataLengthToRead = iStream.Length;//獲取下載的文件總大小

            Response.ContentType = "application/octet-stream";

            Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));

            while (dataLengthToRead > 0 && Response.IsClientConnected)

            {

                int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//讀取的大小

                Response.OutputStream.Write(buffer, 0, lengthRead);

                Response.Flush();

                dataLengthToRead = dataLengthToRead - lengthRead;

            }

            Response.Close();

        }

    }

 

    //流方式下載

    protected void Button4_Click(object sender, EventArgs e)

    {

        string fileName = "aaa.txt";//客戶端保存的文件名

        string filePath = Server.MapPath("DownLoad/aaa.txt");//路徑

 

        //以字符流的形式下載文件

        FileStream fs = new FileStream(filePath, FileMode.Open);

        byte[] bytes = new byte[(int)fs.Length];

        fs.Read(bytes, 0, bytes.Length);

        fs.Close();

        Response.ContentType = "application/octet-stream";

        //通知瀏覽器下載文件而不是打開

        Response.AddHeader("Content-Disposition", "attachment;  filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));

        Response.BinaryWrite(bytes);

        Response.Flush();

        Response.End();

 

    }

}

 


該文章在 2021/1/29 9:47:19 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved