FTP服务器上的文件下载及下载文件为什么会包含当前页面的HTML代码

  public bool Download(string fileName)
    {

        string serverDir = "";//ftp服务器上的文件夹
        string ftpServerIP = "";//服务器ip
        string ftpUserID = "";//用户名
        string ftpPassword = "";//密码
       
        string uri = string.Format("ftp://{0}/{1}/{2}", ftpServerIP, serverDir, fileName);
        FtpWebRequest reqFTP;
        try
        {
         
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
            reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
            reqFTP.UseBinary = true;
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
            Stream ftpStream = response.GetResponseStream();
            long cl = response.ContentLength;
             int bufferSize = 102400;
            int readCount = 0;
            byte[] buffer = new byte[bufferSize];
            Response.ContentType = "application/octet-stream";
            //通知浏览器下载文件而不是打开    
            Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
           while ((readCount = ftpStream.Read(buffer, 0, bufferSize)) > 0)
            {
                Response.OutputStream.Write(buffer, 0, readCount);
               //Response.Flush();
                 
            }
          
             Response.End();
             ftpStream.Close();
             response.Close();
             return true;
        }
        catch (Exception ex)
        {
         return false;
      
        }

PS:

通常页面的点击事件进入后台程序通常会进行页面刷新,但是当我点击下载文件的时候为什么不刷新当前页面?
asp.net 中aspx页面实际是一个类,该类中是服务器通过HTTP中的Response响应向客户端浏览器write()HTML拼接的代码数据,通过Response.ContentType = "application/html"; 来指定浏览器发送的数据,浏览器就会把他翻译成需要显示的页面。Response.ContentType="application/数据类型"是用来指定发送的数据类型,当发送字节流数据时,响应类型指定为Response.ContentType = "application/octet-stream"; 这样的话就会客户端浏览器就会知道服务器的响应信息是字节流文件就不会重新加载HTML就不会产生刷新,浏览器显示的页面就是刚进入下载界面时候服务器Response.write()的HTML代码,如果不加Response.End();的话,服务器就会继续使用response.write()输出该页面的HTML代码并加入Response.OutputStream.Write()中,这样打开下载后的文件就会发现内部多了当前页面的HTML代码,可以理解为aspx页面类是服务器响应Response.write()输出的一部分.  

个人分析,如有不对请指正。

转载于:https://www.cnblogs.com/eason-chan/p/3668623.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值