.net 檔案下載

SunRain117發表於2014-07-11

        //TransmitFile實現下載

   protected void Button1_Click1(object sender, EventArgs e) 

        {

            string strFileName = "dd.ppt"; 

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

            //Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); 

            string filename = BLL.Config.PART_EM_UPLOAD_DOC + strFileName;  

            //BLL.Config.PART_EM_UPLOAD_DOC 為路徑   ("D:/EMUploadDoc/") 

            Response.AddHeader("Content-Disposition", "attachment;filename=" +Server.UrlPathEncode(strFileName)); 

           //Server.UrlPathEncode()解決檔名的亂碼問題. 

             

            Response.TransmitFile(filename); 

        } 

   //WriteFile實現下載 

    protected void Button2_Click(object sender, EventArgs e) 

    {

        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,這樣可以緩解伺服器的壓力 

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

    } 

C#:  
///  
///   檔案下載
///  
///  
private   void   FileDownload(string   FullFileName)
{
FileInfo   DownloadFile   =   new   FileInfo(FullFileName);  
Response.Clear();
Response.ClearHeaders();
Response.Buffer=false;
Response.ContentType= "application/octet-stream ";
Response.AppendHeader( "Content-Disposition ", "attachment;filename= "   +HttpUtility.UrlEncode(DownloadFile.FullName,System.Text.Encoding.UTF8));
Response.AppendHeader( "Content-Length ",DownloadFile.Length.ToString());
Response.WriteFile(DownloadFile.FullName);
Response.Flush();
Response.End();
}

檔案讀寫
public Stream GetFileStream(string filename)     
        {   //檔案地址         
            Uri fileUri = new Uri(filename, UriKind.Relative);    
            //儲存          
            StreamResourceInfo info = new StreamResourceInfo(this.stream, null); 
            if (this.stream is System.IO.FileStream)          
            {           
                this.stream.Seek(0, SeekOrigin.Begin);         
            }          
            StreamResourceInfo stream = System.Windows.Application.GetResourceStream(info, fileUri);         
            if (stream != null)
            {             
                return stream.Stream;   
            }          
            return null;     
        }
        public IEnumerable GetFileNamesInZip()
        {
            BinaryReader reader = new BinaryReader(stream);
            stream.Seek(0, SeekOrigin.Begin);
            string name = null;
            List names = new List();
            while (ParseFileHeader(reader, out name))       
            {
                names.Add(name);
            }
            return names;
        }
        private static bool ParseFileHeader(BinaryReader reader, out string filename)
        {
             filename = null;   
            if (reader.BaseStream.Position < reader.BaseStream.Length)  
            {
                 filename = null;         
                if (reader.BaseStream.Position < reader.BaseStream.Length)  
                 {
                    reader.BaseStream.Seek(2, SeekOrigin.Current);                
                    short genPurposeFlag = reader.ReadInt16();               
                    if (((((int)genPurposeFlag) & 0x08) != 0))   
                        return false;
                    reader.BaseStream.Seek(10, SeekOrigin.Current);    
                    int compressedSize = reader.ReadInt32();
                    int unCompressedSize = reader.ReadInt32(); 
                    short fileNameLenght = reader.ReadInt16();
                    short extraFieldLenght = reader.ReadInt16();
                    filename = new string(reader.ReadChars(fileNameLenght));                
                    if (string.IsNullOrEmpty(filename))
                         return false;             
                    reader.BaseStream.Seek(extraFieldLenght + compressedSize, SeekOrigin.Current); 

                   if (unCompressedSize == 0)            

                  return ParseFileHeader(reader, out filename);                 
                         else            
                             return true;
                     }          
            }          
            return false;      
        }

源地址:http://blog.sina.com.cn/s/blog_680942070101ahsq.html

相關文章