现在的位置: 首页 > 综合 > 正文

net 下载代码

2013年10月10日 ⁄ 综合 ⁄ 共 2379字 ⁄ 字号 评论关闭

int id =1Convert.ToInt32(Page.Request.QueryString["id"]);

        //Response.Write("下载表示id"+id);
        string sql = "select * from t_upload where id='" + id + "'";                                                               //流方式下载
        DataSet ds = DBHepler.GetDataSet(sql, CommandType.Text, null);
        string upName = ds.Tables[0].Rows[0]["upName"].ToString();
        string filePaht = ds.Tables[0].Rows[0]["upPath"].ToString();
        FileStream fs = new FileStream(filePaht,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(upName,System.Text.Encoding.UTF8));
        Response.BinaryWrite(bytes);
        Response.Flush();                                                //
        Response.End();                                                  //

        Response.ContentType = "application/x-zip-compressed";                                             //Transmitfile下载来解决使用Response.BinaryWrite
                                                                                                                                                                下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题
        Response.ContentType = "application/octet-stream";
        Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlPathEncode(upName));
        Response.TransmitFile(filePaht);
        Response.Flush();
        Response.End();

        FileInfo fileInfo = new FileInfo(filePaht);    //WriteFile分块下载
        if(fileInfo.Exists==true){
            const long chunkSize = 102400;                                                  //每次读取文件 100k,以减轻服务器的压力
            byte[] buffer=new byte[chunkSize];
            Response.Clear();                                                                         //响应,清除缓存
            FileStream iStream = File.OpenRead(filePaht);
            long datalengthSize = iStream.Length;                                      //下载文件的大小
            Response.ContentType = "application/octet-stream";
            Response.AddHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(upName));
            while(datalengthSize>0&&Response.IsClientConnected){
                int lengRead = iStream.Read(buffer,0,Convert.ToInt32(chunkSize));//读取的大小
                Response.OutputStream.Write(buffer,0,lengRead);
                Response.Flush();
                datalengthSize = datalengthSize - lengRead;
            }
            Response.Close();

        }

抱歉!评论已关闭.