文件的上传和下载

1.文件的上传和下载

  HTTP请求及HTTP响应中都包含正文部分。HTTP响应的正文部分最常见的是HTML文档,此外还可以是其他任意格式的数据,如图片和声音文件中的数据。同样,HTTP请求的正文部分不仅可以是字符串格式的请求参数,也可以是其他任意格式的数据。

  Web服务器只要把特定文件中的数据放到HTTP响应的正文部分,就能向浏览器发送任意格式的文件。同样,浏览器只要把特定文件中的数据放到HTTP请求的正文部分,也能向服务器发送任意格式的文件。

文件下载

文件下载是指把服务器端的文件发送到客户端,Servlet能够向客户端发送任意格式的文件数据。

文件上传

文件上传指把客户端文件发送到服务器端。此时,客户端发送的HTTP请求正文采用 multipart/form-data数据类型,它表示复杂的包含多个子部分的复合表单。

文件上传原理分析:

HTML核心代码

<form method="post" enctype="MULTIPART/FORM-DATA" action=" UploadServlet">

    Choose File:  <input type="file" name="filedata" size="30"/>

    <input type="submit" name="submit" value="upload">

</form>

运行显示如下图

此时点击浏览,选择Data.txt文件作为上传文件。

Data.txt中包含如下内容

Test  Dataupload01

Test  Dataupload02

Test  Dataupload03

Test  Dataupload04

此时点击upload按钮,提交给Web服务器。此时HTTP请求信息


分析上传文件的HTTP请求

HTTP请求的正文部分为复合类型,包含两个子部分:文件部分和提交按钮部分。提交请求时,浏览器随机产生了一个字符串形式的边界(boundary)作为HTTP请求头的一部分:

HTTP请求的正文部分的各个子部分之间用边界进行分割。每个子部分由头和正文部分组成,头和正文部分之间用空行分割。如下图

根据以前所学,如果要将Data.txt文件中数据上传到服务器,需要对HTTP请求进行解析,读取其中的边界值,再根据边界值定位到文件部分,进而定位到文件部分的正文部分,再把正文部分的数据保存到本地文件系统中。

此程序可向服务器端上传任意格式的文件数据。一般处理文件部分的正文部分时,会按照字节流而不是字符流处理写到本地文件整。

思路:解析该HTTP请求,将上传的信息保存到服务器。

根据以上分析,不管 HTTP 请求正文为何种数据类型, Servlet 容器都会把 HTTP 请求包装成一个 HttpServletRequest 对象。请求正文为 ”multipart/form-data” 数据类型时, Servlet 直接从 HttpServletRequest 对象中解析出复合表单的每个子部分,但工作量依然非常复杂。

猜你喜欢

转载自blog.csdn.net/Caozefei_2018/article/details/80383229