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请求,将上传的信息保存到服务器。 |