none
ASP.NET Getting Started FAQ: Bagaimana untuk men-download file? (Part 3) RRS feed

  • Diskusi Umum

  • public bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullUrl, long _speed) 
    { 
        try 
        { 
            FileStream myFile = new FileStream(_fullUrl, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
            BinaryReader br = new BinaryReader(myFile); 
            try 
            { 
                _Response.AddHeader("Accept-Ranges", "bytes"); 
                _Response.Buffer = false; 
                long fileLength = myFile.Length; 
                long startBytes = 0; 
                int pack = 10240; //10K bytes 
                int sleep = (int)Math.Floor((double)(1000 * pack / _speed)) + 1; 
                if (_Request.Headers["Range"] != null) 
                { 
                    _Response.StatusCode = 206; 
                    string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' }); 
                    startBytes = Convert.ToInt64(range[1]); 
                } 
                _Response.AddHeader("Content-Length", (fileLength - startBytes).ToString()); 
                if (startBytes != 0) 
                { 
                    _Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength - 1, fileLength)); 
                } 
                _Response.AddHeader("Connection", "Keep-Alive"); 
                _Response.ContentType = "application/octet-stream"; 
                _Response.AddHeader("Content-Disposition", "attachment;filename="  
                                    + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8)); 
                br.BaseStream.Seek(startBytes, SeekOrigin.Begin); 
                int maxCount = (int)Math.Floor((double)((fileLength - startBytes) / pack)) + 1; 
                for (int i = 0; i < maxCount; i++) 
                { 
                    if (_Response.IsClientConnected) 
                    { 
                        _Response.BinaryWrite(br.ReadBytes(pack)); 
                        Thread.Sleep(sleep); 
                    } 
                   else 
                    { 
                        i = maxCount; 
                    } 
                } 
            } 
            catch 
            { 
                return false; 
            } 
            finally 
            { 
                br.Close(); 
                myFile.Close(); 
            } 
        } 
        catch 
        { 
            return false; 
        } 
        return true; 
    }
     
    Thread terkait: http://forums.asp.net/p/1204802/2109808.aspx#2109808
    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Jumat, 08 Juli 2011 08.07
    Moderator