1. 把客户端的文件上传到服务器
使用http协议不要上传超过4M的文件(可以在web.config中进行修改),而且不支持断点续传
网盘上可以上传1G的文件,是通过浏览器插件实现的
1)浏览器端
1.表单元素使用 文件选择框<input type="file" name="t"/> 控件。
2.表单设置enctype="multipart/form-data",
本质上就是设置浏览器提交表单的数据时,
使用随机分隔符来分割不同控件的数据,而且数据的组织形式由 name=value换成了数据头和数据体的方式。
2)服务器端
1.服务器接收客户端上传的文件使用Request.Files属性。
2.使用HttpPostedFile的SaveAs方法将图片保存在服务器。
2. 一般处理程序(HttpHandler)是对请求的响应,实际上可以输出任意的类型。
可以是普通的html内容,也可以输出图片,也可以输出一个文件(下载)
HttpHandler实现动态图片输出
System.Data命名空间下的这组类库 --> ADO.NET
System.Drawing命名空间下的类库 --> GDI+
3. HttpHandler实现文件下载
如果HttpHandler输出的是html/text/jpeg等类型的信息,那么浏览器会直接显示,
如果希望弹出保存对话框,则需要添加Header
Response.AddHeader(“Content-Disposition”, string.Format(“attachment;filename=\”{0}\“”, encodeFileName));
IE中下载时处理中文url的方法
string encodeFileName = HttpUtility.UrlEncode(“生活大爆炸1-17.avi”);
4. 静态页面 动态页面
动态页面会执行服务器端代码,静态页面不会执行服务器端代码
静态页面:在服务器就相当于直接读取文件字符串然后返回客户端浏览器;
(任何时候访问看到的都是一样的界面。)
动态页面:在服务器是先交给某语言环境虚拟机编译运行,按照语法生成代码返回客户端浏览器。
(不同条件和时候访问看到的都界面也不同。)
5. 浏览器请求和服务器响应的过程
1)用户在浏览器地址栏输入:http://localhost:80777/FirstShower.ashx
2)服务器IIS接收到用户的请求,发现是请求.ashx文件,便将请求交给framework执行
framework找到对应的文件FirstShower.ashx,执行其ProcessRequest(context)方法
执行后将生成的字符串(通常是html+css+javascript格式)
以及响应头(如content-type,状态码等)返回给浏览器
3)浏览器接收到服务器返回的数据,并按照http语法解释(如content-type是attachment,就执行下载)
执行,以界面的方式展示给用户看到
此时如果html等代码中包含外部文件,则再次发送单独请求服务器相应文件数据
6. 服务器执行客户端请求的详细说明
1)当浏览器请求发送到服务器电脑,电脑将请求交给指定80端口的软件IIS,
2)IIS发现.aspx和.ashx它自己处理不了,就将请求交给IIS扩展程序 ASPNET_isapi.dll来处理。
3)然后ASPNET_isapi.dll生成一个工作者进程(w3wp)启动一个应用程序域
4)请求被交给HttpRuntime处理,HttpRuntime会将[http请求报文]封装到HttpContext对象中,
并通过HttpApplicationFactory来创建一个【HttpApplication】,同时将HttpContext对象传给它。
5)接下来,大部分处理都是由HttpApplication来完成的!HttpApplication类负责创建和执行页面
包括调用处理管道(一系列过滤器---本质上就是调用一系列委托)-->19个事件
6)IHttpHandler(在11-12事件中间执行了被请求的处理程序(aspx,ashx)) 的处理流程
7. 第一次请求网站时的编译的过程
1)一般处理程序(C#代码)通过反射创建了类
2).NET Framework将其编译成IL代码(程序集dll)
3)JIT(即时编译)编译成机器码(0101),储存在服务器内存中
其他浏览器再次请求网站的时候直接使用服务器内存中的机器码