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


        }
  • 相关阅读:
    iMac中的GoLand中报错: Unresolved reference 错误解决方法
    设置初次ssh登录linux的时候无需yes确认登陆
    docker命令常用总结
    阿里巴巴-菜鸟网络高级java开发工程师/技术专家招聘
    mysql8.0.22 设置sql_mode后不能启动解决
    《事实》读后感
    VPS是什么?
    做了一个小程序,欢迎关注
    [Linux] Tomcat java.lang.OutOfMemoryError: Java heap space
    [Linux] Nginx 反向代理配置 http headers 带下划线fields转发
  • 原文地址:https://www.cnblogs.com/wudingfeng/p/1315582.html
Copyright © 2011-2022 走看看