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();
    //重要
            }


        }
  • 相关阅读:
    【Networking】(转)一个非常好的epoll+线程池服务器Demo
    【算法】Logistic regression (逻辑回归) 概述
    【Linux】/dev/null 2>&1 详解
    单点登录与联合登录
    web项目报outmemory错误解决方案
    hadoop学习之HDFS
    ELK日志分析系统
    基于cookie共享的SSO中的遇到的问题
    oracle的隐式游标
    mysql截取字符串与reverse函数
  • 原文地址:https://www.cnblogs.com/wudingfeng/p/1315582.html
Copyright © 2011-2022 走看看