文件的上传和下载和邮件发送

上传人:小** 文档编号:89171324 上传时间:2019-05-20 格式:DOC 页数:15 大小:481.50KB
返回 下载 相关 举报
文件的上传和下载和邮件发送_第1页
第1页 / 共15页
文件的上传和下载和邮件发送_第2页
第2页 / 共15页
文件的上传和下载和邮件发送_第3页
第3页 / 共15页
文件的上传和下载和邮件发送_第4页
第4页 / 共15页
文件的上传和下载和邮件发送_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《文件的上传和下载和邮件发送》由会员分享,可在线阅读,更多相关《文件的上传和下载和邮件发送(15页珍藏版)》请在金锄头文库上搜索。

1、文件的上传和下载学习目标学习任务:掌握文件上传和下载技术1. 文件上传文件上传:允许客户将本地文件,上传到服务器端 应用场景:上传照片、上传新闻图片、上传附件学习上传技术 1: 提供上传页面 upload.jsp 图片 视频2: 上传文件解析考虑(request.getParameter(name)-dao)( 图片 视频 都是二进制文本 解析(过程难点!) 输出流 到服务器) 3:get/post 上传必定post 提交 4: 上传表单urlencoder 修改传输方式 1.1. 文件上传jsp页面设置在用户的页面 .jsp 页面需求如下:jsp页面需要的参数配置1、在用户页面中添加上传输入

2、项 (客户端页面操作)注意事项:要求1) 必须为文件上传input 提供name属性,否则文件上传内容不会被表单提交 2) 表单的提交是post3) 设置表单的enctype=multipart/form-data 使得文件上传编码 - MIME编码格式上传 jsp条件:1: 准备jsp 页面 form method = post2: 默认编码 urlencoded 修改表单 enctype属性值: multipart/form-data 规定3: 上传文件 必须提供 Input 标签 必须 type=file 一定要提供 name 属性2: 编写服务器代码 解析 servlet 1.2. 上

3、传的服务器编码实现步骤a) http:/commons.apache.org/fileupload/ 下载fileupload jar包 同时下载 commons-fileupload 和 commons-io 两个包 - fileupload依赖io包b) 将jar包导入 web 工程WEB-INF/lib下 c) 编程实现jsp页面: name=file method=post enctype=multipart/form-data步骤一:获得DiskFileItemFactory 工厂步骤二:通过工厂 获得文件上传请求核心解析类 ServletFileUpload 步骤三:使用Servl

4、etFileUpload对request进行解析 - 获得很多个FileItem步骤四:对每个FileItem进行操作 判断FileItem是不是普通字段 isFormField 代表普通字段FileItem getFieldName(); - 获得表单项name属性getString(); - 获得表单用户输入值:value中文乱码 getString(utf-8);代表文件上传FileItemgetInputStream() - 获得文件内容输入流write(File) - 上传文件写到目标位置 delete(); 删除上传的临时文件getName() - 获得上传文件名称 中文乱码解决

5、servletFileUpload.setHeaderEncoding(utf-8); 注意问题: 1: 上传的文件存放位置说明! 2: 不同浏览器兼容问题: 3: 文件名重名问题解决1.3. commons-fileupload 核心API 分析1、ServletFileUpload 文件上传核心类 static boolean isMultipartContent(javax.servlet.http.HttpServletRequest request) 判断request的编码方式是否为multipart/form-datajava.util.List parseRequest(jav

6、ax.servlet.http.HttpServletRequest request) 解析request,将请求体每个部分封装FileItem对象,返回List(了解)void setFileSizeMax(long fileSizeMax) 设置单个文件上传大小 void setSizeMax(long sizeMax) 设置总文件上传大小 void setHeaderEncoding(java.lang.String encoding) 设置编码集 解决上传文件名乱码3、FileItem 表示文件上传表单中 每个数据部分boolean isFormField() 判断该数据项是否为文件上

7、传项,true 不是文件上传 false 是文件上传if(fileItem.isFormField() / 不是上传项 java.lang.String getFieldName() 获得普通表单项name属性值 java.lang.String getString() / 获取非上传文件表单域的数据获得普通表单项value属性 传入编码集用来解决输入value乱码 else / 是上传项- 上传文件 java.lang.String getName() 获得上传文件名 (注意IE存在路径) java.io.InputStream getInputStream() 获得上传文件内容输入流 /

8、上传文件 void delete() 删除临时文件(删除时,必须要管理输入输出流)注意上传文件编码的设置问题:因为文件上传表单采用编码方式multipart/form-data 与传统url编码不同,所以getParameter 方法不能使用 setCharacterEncoding 无法解决输入项乱码问题 采用apache自带的中文解决乱码处理:setHeaderEncoding(java.lang.String encoding)1.4. 小结上传文件 上传文件jsp页面设置 1、在用户页面中添加上传输入项 (客户端页面操作) 1) 必须为文件上传input 提供name属性,否则文件上传

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

10、码问题 普通编写项-非上传文件的编码处理 value属性乱码 -fileItem.getString(编码集); item.getString(utf-8);5: 上传文件项 上传文件名乱码处理-fileupload.setHeaderEncoding(编码集); / 核心解析类 解决文件上传名称乱码upload.setHeaderEncoding(utf-8);2. 文件下载 将服务器端文件下载到客户端(本地电脑)2.1.1. 编写服务器程序,读取服务器端文件,完成下载 思路分析 :浏览器本身就可以支持文件的下载. 点击需要下载文件 浏览器弹出附件框 另存为 文件输出流 形式写到本地电脑硬盘

11、如何通知 浏览器 弹出附件框? http协议 request response(服务器创建 通知浏览器)response 通知浏览器 设置浏览器消息头注意问题: 代码设计下载服务器存在资源:告知浏览器 1: 浏览器附件形式:附件下载2: 服务器告诉浏览器下载文件类型 MIME类型(告知浏览器下载文件类型 .avi.rmvb.jpg?)3: 输出流! 服务器 下载-浏览器 读出.用户磁盘上面 response.getWriter(); response.getOutputStream();- 用户磁盘中必须设置两个头信息Content-Type 下载文件的类型(mime)Content-Disp

12、osition 下载文件采用附件的形式需要下载的输入流 response.getOutputStream();设置文件的类型代码:response.setContentType(getServletContext().getMimeType(filename);设置文件的下载形式:附件下载代码response.setHeader(Content-Disposition, attachment;filename= + filename); / 以附件形式打开,不管格式浏览器是否识别 小结:下载:简称 一个流 2 个头流: 读取服务器资源到本地磁盘:response.getOutputStream

13、()2.1.2. 下载附件文件名乱码问题如果下载文件是中文名,产生乱码 原因: 不同浏览器 默认解码机制不同IE使用URL解码 、FF使用 BASE64解码 浏览器本身设计机制先可以解决ie乱码:URLEncoder设置 response.setHeader(Content-Disposition, attachment;filename= + filename); 出现附件名乱码:filename 需要编码输出。不同浏览器处理下载附件名乱码 处理方式不同 ,解决乱码问题我们需要获取不同的浏览器头信息。通过USER-AGENT 请求头信息字段,判断来访者浏览器类型 request对象获取解决:

14、采用手动BASE64 编码 BASE64Encoder base64Encoder = new BASE64Encoder();filename = =?utf-8?B? + base64Encoder.encode(filename.getBytes(utf-8) + ?=;判断不同的浏览器下载的中文编码处理 模版代码:工具代码:String agent = request.getHeader(user-agent);String realname = resource.getRealname();if (agent.contains(Firefox) / 采用BASE64编码realname = =?UTF-8?B?+ new BASE64Encoder().enc

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

当前位置:首页 > 商业/管理/HR > 管理学资料

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