zoukankan      html  css  js  c++  java
  • C#中的文件下载问题

    昨天做文件下载时,发现图片文件和文本文件总是会在页面里面打开而不是弹出下载对话框,于是在网上找了很久,最终自己写了一个。

    public void DownMaxFile(string filePath,string showFileName)
        
    {
            
    int bufferSize = 10000, length = 0;
            
    long dataToRead, startBytes = 0;
            Stream iStream 
    = null;

            
    byte[] buffer = new Byte[bufferSize];
            
    string filename = Path.GetFileName(filePath);

            
    //查看是否是断点续传请求
            if (Request.Headers["Range"!= null)
            
    {
                Response.StatusCode 
    = 206;
                
    string[] range = Request.Headers["Range"].Split(new char[] '=''-' });
                startBytes 
    = Convert.ToInt64(range[1]);
            }


            
    try
            
    {
                iStream 
    = new FileStream(filePath, FileMode.Open,FileAccess.Read, FileShare.Read);
                dataToRead 
    = iStream.Length;

                
    if (startBytes != 0)
                
    {
                    Response.AddHeader(
    "Content-Range"string.Format(" bytes {0}-{1}/{2}", startBytes, dataToRead - 1, dataToRead));
                }

                Response.AddHeader(
    "Accept-Ranges""bytes");
                Response.AddHeader(
    "Content-Length", (dataToRead - startBytes).ToString());
                Response.AddHeader(
    "Connection""Keep-Alive");
                Response.ContentType 
    = "application/octet-stream";
                Response.AddHeader(
    "Content-Disposition""attachment; filename=" + HttpUtility.UrlEncode(showFileName, System.Text.Encoding.UTF8));

                
    while (dataToRead > 0)
                
    {
                    
    if (Response.IsClientConnected)
                    
    {
                        length 
    = iStream.Read(buffer, 0, bufferSize);
                        Response.OutputStream.Write(buffer, 
    0, length);
                        Response.Flush();
                        buffer 
    = new Byte[bufferSize];
                        dataToRead 
    = dataToRead - length;
                    }

                    
    else
                    
    {
                        dataToRead 
    = -1;
                    }

                }

            }

            
    catch (Exception ex)
            
    {
                Response.Write(
    "Error : " + ex.Message);
            }

            
    finally
            
    {
                
    if (iStream != null)
                
    {
                    iStream.Close();
                }

                Response.Close();
    //重要
            }


        }
  • 相关阅读:
    7,C++ public, protected, private 继承的区别
    6,又一道经典的微软题
    5,一道经典的微软程序题
    33. Search in Rotated Sorted Array
    198,House Robber
    4,二维数组中指针的问题
    剑指offer——stack与queue的互相实现
    3,C语言文件读写
    2,虚函数
    剑指offer——已知二叉树的先序和中序排列,重构二叉树
  • 原文地址:https://www.cnblogs.com/wudingfeng/p/1315582.html
Copyright © 2011-2022 走看看