要有一个 form 标签,method-post请求 (因为get有长度限制)
form标签的属性 encType 值必须为 multipart/form-data
表示提交的数据以多端(每一个表单项一个数据段)的形式进行拼接,然后以二进制流的形式发送给服务器
在 form 标签中使用 input type="file" 添加上传的文件
编写服务器代码 (Servlet接收),接受处理上传的数据
文件上传http请求信息:
请求头:Content-Type: multipart/form-data; boundary=------WebKitFormBoundaryCd3g75eOt35olUs7
解析:
Content-Type 表示提交的数据类型multipart/form-data 表示以流的形式分段提交服务器boundary 表示每段数据的分隔符,值:----WebKitFormBoundarylXiF4fEzpo9c8L4p 是浏览器每次随机生成的,它就是每段数据的分界符。在每段里面 第一行是对表单项的描述,然后有个空行,下面是提交的值。请求体:
------WebKitFormBoundaryCd3g75eOt35olUs7Content-Disposition: form-data; name="username"
zhu------WebKitFormBoundaryCd3g75eOt35olUs7Content-Disposition: form-data; name="photo"; filename="head.jpg"Content-Type: image/jpeg
文件的信息(很长这里省略了)------WebKitFormBoundaryCd3g75eOt35olUs7--
因为客户端是以按流的方式提交是,所以我们要按流的方式获取,不能这样: req.getParameter("username");
正确用法:
2. 文件上传这种文件上传(常用)有很多第三方提供好的API我们使用进行了,可以帮我们对收到的数据进行解析。
例如:commons-fileupload-1.2.1.jar (依赖于 commons-io-1.4.jar)
导入两个jar包解析关键的类:
ServletFileUpload 类:用于解析上传的数据FileItem 类:每一个表单项Servlet上传文件示例:
3. 文件下载客户端 ->(发送请求告诉服务器我要下载什么文件) -> 服务器
服务器干的内容:
获取要下载的文件名读取要下载的文件内容通过响应头告诉客户端返回的数据类型是什么 (和要下载的类型一致)告诉的客户端收到的数据是用于下载使用(还是用响应头设置)把下载的的文件内容回传给客户端下载这个也能用 commons-io-1.4.jar 的IOUtils 类:
到此这篇关于Servlet文件的上传与下载详解的文章就介绍到这了,更多相关Servlet上传下载文件内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!