文件上传:数据上传是指客户端向服务器上传数据,客户端向服务器发送的所有请求都属于数据上传。
文件上传是数据上传的一种特例,指客户端向服务器上传文件。即将保存在客户端的文件上传至服务器中一个副本,保存到服务器中。
上传与下载的文件可以是文本文件、图片、声音、视频等各种类型。
文件上传的实现:
上传表单要求:文件上传要求客户端表单提交特殊的请求,即包含多部分数据的请求。所以文件上传表单对于表单数据的编码类型要求必须为multipart/form-data。即要为标签指定enctype属性值为"multipart/form-data"。enctype即编码类型。
由于客户端上传文件的大小不确定,所以HTTP协议规定,文件上传的数据要存放于请求正文中,而不能出现在URL地址栏中,因为地址栏中可以存放的数据量太小,也就是说文件上传的表单,必须提交POST请求,而不能提交GET请求。
文件上传对表单的要求:
- 表单中的请求方式必须是post(get对文件的大小有限制)
- 表单中要指定所提交的请求为multipart请求,通过在标签中添加enctype属性,其值为multipart/form-data表示提交的数据,以多段(每一个表单项一个数据项)的形式进行拼接,然后以二进制流的形式发送给服务器。
- 表单中要有file表单元素:input type=file添加上传的文件
enctype属性规定在发送到服务器之前应该如何对表单数据进行编码。默认地,表单数据会编码为"application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码。HTML表单如何打包数据文件是由enctype这个属性决定的,enctype有以下几种取值:
值 | 描述 |
application/x-www-form-urlencoded | 在发送前编码所有字符(默认)(空格被编码为'+',特殊字符被编码为ASCII十六进制字符)。 |
multipart/form-data | 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。 |
text/plain | 空格转换为"+"加号。但不对特殊字符编码。 |
默认enctype=application/x-www-form-urlencoded,所以表单的内容会按URL规则编码,然后根据表单的提交方法:
- method="get" 编码后的表单内容附加在请求连接后。
- method="post" 编码后的表单内容作为post请求的正文内容。
文件上传时发送的HTTP协议内容