zoukankan      html  css  js  c++  java
  • C#的cs文件中Response.Clear();Response.ClearHeaders()的作用

    在学习一个CS文件,如下:
    public partial class GetPic : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string picid = Request.QueryString["id"];
            string pictureFilename = Path.Combine(Server.MapPath("/productpictures"), picid + ".jpg");
            Response.Clear();
            Response.ClearHeaders();
            Response.AppendHeader("content-type", "image/jpeg");
            Response.WriteFile(pictureFilename);
            Response.Flush();
            Response.End();
        }
    }
    这是一个输出图片文件的程序,请问向网页上输出内容的时候是必须都得先Response.Clear();和Response.ClearHeaders();吗?如果不用这两个清除能怎样呢?

    解答:

    并非必须的 ,倘若你在调用
    Response.WriteFile(pictureFilename);
    之前还向缓冲区中写入过数据例如调用过:Response.Write("abc"); 并且你还希望浏览器能够将这个图片正常的显示,这时你就需要Response.Clear();了
    如果不Response.Clear();那么图片将可能无法正常的显示为什么呢?
    原因是这样的,首先你想要告诉客户端这个响应内容的类型为image/jpeg
    你是通过Response.AppendHeader("content-type", "image/jpeg"); 申明的。
    然后能当客户端得到这个响应数据时也将会将这些数据按照image/jpeg
    来解释,但是由于你前面掉用了Response.Write("abc"); 因此客户端实际上得到的内容为 <字符:abc>+<图片的数据> 这样客户端得到的数据实际上不仅仅是图片的数据但是由于你声明的“content-type”强调了这些数据应该按照image/jpeg来解释 最终导致的结果就是图片不能正常的解码 所以在Response.WriteFile(pictureFilename);
    之前先调用Response.Clear();较为保险

  • 相关阅读:
    Android蓝牙通信 .[转]
    通过VS2010性能分析来查找代码中那些地方最损耗资源 [转]
    【百度地图API】如何区分地址解析和智能搜索?
    Windows 程序员必备的知识和工具
    NUnit详细使用方法
    Android 蓝牙开发浅析 [转]
    软件工程的国家标准下载链接
    android布局属性详解
    Android之Service相关
    Android 实现布局动态加载
  • 原文地址:https://www.cnblogs.com/BluceLee/p/4499971.html
Copyright © 2011-2022 走看看