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


        }
  • 相关阅读:
    学数据结构,仅仅须要主要的编程体验
    Android中的跨进程通信方法实例及特点分析(二):ContentProvider
    phpStorm打开提示 failed to create JVM 的解决的方法
    (转)Hibernate框架基础——Java对象持久化概述
    (转)版本管理工具介绍——SVN篇(二)
    (转)版本管理工具介绍——SVN篇(一)
    (转)全文检索技术学习(三)——Lucene支持中文分词
    (转)全文检索技术学习(二)——配置Lucene的开发环境
    (转)全文检索技术学习(一)——Lucene的介绍
    (转) 学习淘淘商城第一课
  • 原文地址:https://www.cnblogs.com/wudingfeng/p/1315582.html
Copyright © 2020-2023  润新知