15.1-上传和下载_课程笔记.docx

上传人:cn****1 文档编号:546051466 上传时间:2022-09-25 格式:DOCX 页数:29 大小:1.14MB
返回 下载 相关 举报
15.1-上传和下载_课程笔记.docx_第1页
第1页 / 共29页
15.1-上传和下载_课程笔记.docx_第2页
第2页 / 共29页
15.1-上传和下载_课程笔记.docx_第3页
第3页 / 共29页
15.1-上传和下载_课程笔记.docx_第4页
第4页 / 共29页
15.1-上传和下载_课程笔记.docx_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《15.1-上传和下载_课程笔记.docx》由会员分享,可在线阅读,更多相关《15.1-上传和下载_课程笔记.docx(29页珍藏版)》请在金锄头文库上搜索。

1、文件的上传和下载1. 学习目标学习任务:掌握文件上传和下载技术(资源存放服务器磁盘中.)2. 文件上传文件上传:允许客户将本地文件,上传到服务器端 应用场景:上传照片、上传新闻图片、上传音频等等. 上传准备: 1: 提供页面给用户 点击上传 2: 服务器端接受用户上传文件. 不再是一个字符串 request.getParameter(xx)-String 传统获取客户资源api request.getParamtger/values/map String String 上传服务器端 servlet 代码 需要专门api 解析上传文件-I/O 写到 服务器端指定磁盘文件 服务器端如何获取绝对路径

2、! ServletContext.getRealPath()2.1. 文件上传jsp页面设置在用户的页面 .jsp 页面需求如下:jsp页面需要的参数配置1、在用户页面中添加上传输入项 (客户端页面操作) 注意事项:要求1) 必须为文件上传input 提供name属性,否则文件上传内容不会被表单提交 2) 表单的提交是post 3) 设置表单的enctype=multipart/-data 使得文件上传编码 - MIME编码格式上传页面的编写说明day18_upload 工程 编写 upload.jsp 页面上传jsp页面硬性要求upload.jsp 页面设计:2: 服务器端 servlet

3、表单提交action 地址 获取上传信息 解析文件 -I/O 写到磁盘位置 解析request.getInputStream 将文件和文本信息 分类保存 请求参数信息 自动封装一个对象 FileItem对象 引入 apache 上传框架 一组 jar 引入lib 目录即可 lib 引入2个jar 查看文档 如何上传! 解析request.InputStream 重点从此开始1: 开发步骤 2: 文档 参照 解析request 对象 List 集合 所有请求参数信息 集合里面泛型! 集合里面元素类型! FileItem : 将上传 普通文本 type=text/radio 类型 封装到FileI

4、tem对象 将上传 文件 type=file - 封装到FileItem 对象里面 解析完成!3: 集合元素进行分类处理 参照文档 集合分类代码 文档 集合List 上传文件处理代码item.getFiledName(): - 获取标签 input 标签 name属性对应值item.getName(); - 上传文件文件名item.getContentType()- 上传文件的mime类型 text/html /注意: 乱码问题 普通文本域 解决乱码 getString(utf-8) 文件名称乱码 : 解析之前解决 parser.setHeaderEncoding(utf-8)关键步骤 上传文

5、件 写到服务器指定磁盘位置:上传本质 1 获取服务器存放上传文件绝路路径 2: item.write(file) 将文件写到指定文件 代替i/o 读取!item.isFormField() 循环遍历集合 判断当前元素是否是一个普通文本域 还是一个上传文件.测试:代码 发现 服务器tomcat主目录 temp 临时目录 会有上传临时文件 缓存! 上传文件完成之后 清除缓存 item.delete() 清理该目录下缓存!优化版本代码 获取服务器绝对路径.5: 上传完成之后 一般 设置上传文件大小 不允许用户肆意上传大文件. 代码 对上传文件大小处理 添加代码 上传过大 提供友好页面 处理异常 捕捉

6、异常信息 在友好页面 给予处理.上传问题说明2.2. 上传问题 1浏览器兼容问题: 1: IE 出问题 火狐没有问题 IE 报错: E:all_apachesapache-tomcat-6.0.32apache-tomcat-6.0.32webappsday18_uploaduploadE:servlet_day02.docIE 出现问题 上传文件名 带有客户端盘符!代码添加对于浏览器类型 提交数据 处理 IE forefire都要可以实现文件上传引入工具类 处理 盘符问题 下发 分层jar servlet 上传的代码 需要添加一行即可.引入工具类截取文件名上传代码添加工具类 解决文件名问题2

7、.3. 上传问题 2 文件名重名问题 覆盖同一个目录下文件名相同的文件!导致文件丢失! 后续操作显示该文件真实名称! 解决方案: 真实名称 和 随机名称 文件存在服务器路径 都插入到数据库1, asdasfasfa.jpg, 陈冠希.jpg , /upload/mm/asdasfasfa.jpg如何解决生成的文件名相同? 引入:UUID 解决方法 引入工具类 生成随机不同的文件名代码块: 补充: 减轻服务器磁盘一个文件夹存放海量文件 可以引入分离目录算法!(了解!)2.4. 上传的服务器编码详细步骤a) http:/commons.apache.org/fileupload/ 下载fileup

8、load jar包 同时下载 commons-fileupload 和 commons-io 两个包 - fileupload依赖io包 b) 将jar包导入 web 工程WEB-INF/lib下 c) 编程实现2.5. commons-fileupload 核心API 分析1、ServletFileUpload 文件上传核心类 static boolean isMultipartContent(javax.servlet.http.HttpServletRequest request) 判断request的编码方式是否为multipart/form-datajava.util.List pa

9、rseRequest(javax.servlet.http.HttpServletRequest request) 解析request,将请求体每个部分封装FileItem对象,返回List(ServletFileUpload 相关api)void setFileSizeMax(long fileSizeMax) 设置单个文件上传大小 void setSizeMax(long sizeMax) 设置总文件上传大小 void setHeaderEncoding(java.lang.String encoding) 设置编码集 解决上传文件名乱码3、FileItem 表示文件上传表单中 每个数据部

10、分 boolean isFormField() 判断该数据项是否为文件上传项,true 不是文件上传 false 是文件上传if(fileItem.isFormField() / 不是上传项 java.lang.String getFieldName() 获得普通表单项name属性值 java.lang.String getString(utf-8) / 获取非上传文件表单域的数据 获得普通表单项value属性 传入编码集用来解决输入value乱码 else / 是上传项- 上传文件 java.lang.String getName() 获得上传文件名 (注意IE存在路径) java.io.I

11、nputStream getInputStream() 获得上传文件内容输入流 / 上传文件 void delete() 删除临时文件(删除时,必须要管理输入输出流)注意上传文件编码的设置问题:因为文件上传表单采用编码方式multipart/form-data 与传统url编码不同,所以getParameter 方法不能使用 setCharacterEncoding 无法解决输入项乱码问题 采用apache自带的中文解决乱码处理:setHeaderEncoding(java.lang.String encoding)2.6. 小结上传文件 上传文件jsp页面设置 1、在用户页面中添加上传输入项

12、 (客户端页面操作) 1) 必须为文件上传input 提供name属性,否则文件上传内容不会被表单提交 2) 表单的提交是post 3) 设置表单的enctype=multipart/form-data 使得文件上传编码 上传文件服务器端:1: 上传文件名 不同浏览器获取的文件名不同 IE 带有盘符 火狐 不带盘符 采用工具类 截取文件名 2: 上传文件位置问题: 存放在WebRoot/及其子目录下 ServletContext.getRealPath(/); 获取服务器的绝对路径 3:上传文件在同一个目录重名问题 如果文件重名,后上传文件就会覆盖先上传文件 文件名 UUID filename

13、 = UUID.randomUUID().toString() + filename;4、乱码问题 普通编写项-非上传文件的编码处理 value属性乱码 -fileItem.getString(编码集); item.getString(utf-8);5: 上传文件项 上传文件名乱码处理-fileupload.setHeaderEncoding(编码集); / 核心解析类 解决文件上传名称乱码 upload.setHeaderEncoding(utf-8);3. 文件下载 将服务器端文件下载到客户端(本地电脑)3.1. 编写服务器程序,读取服务器端文件,完成下载 思路分析 :浏览器本身就可以支持

14、文件的下载. 右击另存为 前提 : 浏览器能访问该图片. 很多的网站 不允许用户直接下载. 资源一般存放WEB-INF 下 浏览器不可以直接去访问 我们需要代码完成附件形式下载! 点击需要下载文件 浏览器弹出附件框 另存为 文件输出流 形式写到本地电脑硬盘下载说明: 服务器指定路径 下载目标资源.1: 获取服务器指定路径对应资源 获取服务器绝对路径.2: 如何让浏览器弹出附件框 服务器通知它(浏览器) response通知浏览器弹出附件框3: 附件框弹出 点击下载 (代码出现流的读取) 服务器路径文件 写出到用户电脑磁盘 借助 浏览器!如何通知 浏览器 弹出附件框? http协议 request response(服务器创建 通知浏

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号