java web 文件上传_Javaweb学习笔记10—文件上传与下载
今天来讲javaweb的第10阶段学习。文件的上传与下载,今天主要说的是这个功能的实现,不用说了,听名字就是外行人也知道肯定很重要啦.
老规矩,首先先用一张思维导图来展现今天的博客内容。
ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载
另外:如果图看不清的话请右击---在新窗口中打开会清楚很多
一*, 文件的上传:
1 *分析实现步骤:
1.1* 客户端浏览器通过文件域选择本地要上传的文件.
* 点击"上传"按钮,将要上传的文件发送到服务器端.
* 服务器端接收客户端发送的上传文件.
* 定义一个保存上传文件的路径.
* 将上传的文件保存在该路径中.
* 将上传后的结果,响应给客户端浏览器.
2*客户端:
2.1* 编写界面:
* 定义一个用于向服务器端发送请求的表单.
* 表单内具有文件域用于选择本地要上传的文件.
* 表单内具有submit按钮用于提交请求的.
2.2* 问题:
问:提交表单时,只是将文件域选择的文件名称上传.(并不是将上传文件提交),怎么解决?
答: 为表单设置enctype="multipart/form-data"
2.3* 注意:
A* 文件域必须指定name属性值,否则需要上传的文件数据是不会上传至服务器端.
B* 完成文件上传功能的表单的请求类型必须是POST方式.
C* 完成文件上传功能的表单的enctype属性值设置为"multipart/form-data",
该值的作用是将需要上传的文件数据添加到Http请求体中,并使用MIME协议对上传的文件进行描述.
3 *服务器端:
3.1 * 使用第三方工具:fileupload
* 使用fileupload组件,导入jar包:
* commons-fileupload-1.3.1.jar
* commons-io-2.2.jar
3.2* 功能实现:
3.21*将上传文件保存的目录放置在Web应用程序的根目录下.(不安全)
A* 问题描述:
* 将上传文件保存后,可以通过浏览器访问到的.
* 举例:如果上传的文件是一个JSP页面,包含Java代码(实现10秒自动关机).
B* 解决方案:
* 将保存上传文件的目录,设置在一个不能通过浏览器访问的位置.
* 将保存上传文件的目录,放置在"WEB-INF"目录下即可.
3.22*处理上传的文件名称:
A* 问题描述:
* 有些浏览器(IE 6),上传的文件名称并不是单纯的文件名,而是该文件的真实路径.
B* 解决方案:
* 判断当前获取的文件名称是真实文件名,还是上传文件的真实路径.
* 如果是真实路径,将文件名之前的所有路径去掉.
3.23*处理上传文件的中文乱码问题:
A * 问题描述:
* 上传文件的名称存在中文乱码问题.
* 上传表单中的普通字段值存在中文乱码问题.
B * 解决方案:
* 上传文件名称:
* request.setCharacterEncoding("utf-8");
* ServletFileUpload.setHeaderEncdoing("UTF-8");
* 普通字段值:
* FileItem.getString(编码格式) -编码格式:表示当前文本内容为什么编码.
3.24*上传文件名称同名问题:
A * 问题描述:
* 前后分别上传两个同名的文件,但内容不同.
* 后上传的文件会覆盖前上传的文件.
B* 解决方案:
* 生成唯一ID:UUID.randomUUID().toString()+"_"+fileName;
3.25*一个目录不能存放多个文件:
A* 问题描述:
* 如果一个目录中存在上传文件过多时,读取不方便.
B* 解决方案:
* 分成多个目录存储上传文件:
①* 按照日期分目录:2015-03-31、2015-04-01等
②* 按照MIME类型分目录:文本格式、图片、视频等
* 按照用户ID分目录:user1、user2等
④*使用UUID生成随机数的hashcode生成多级目录:
3.26*限制上传大小
* 限制单个文件上传大小:upload.setFileSizeMax(1024*1024*3);
* 限制上传文件的总大小:upload.setSizeMax(1024*1024*10);
3.27*文件缓存大小与临时目录
A* 设置临时目录
* 默认的临时目录为System.getProperty("java.io.tmpdir").
* DiskFileItemFactory.setRepository(new File(getServletContext().getRealPath(临时目录相对路径)));
* 在文件上传完成后,调用FileItem的Delete()方法,删除临时目录中的临时文件.(释放资源)
B* 设置缓存大小
* 如果不手动设置缓存大小,默认为10KB.
* DiskFileItemFactory.setSizeThreshold(缓存字节数);
* 手动将缓存大小设置10M,表示什么意思?
* 如果上传文件小于10M的话,存在服务器端的内容中.
* 如果上传文件大于10M的话,存在服务器端的临时目录中.
* 注意:如果设置缓存大小过大,影响服务器端的性能.
3.28*计算文件上传进度控制:
A* 计算上传进度的相关信息:
* 已用时间:当前时间 – 开始时间
* 速度:已经上传大小/已用时间
* 剩余大小:总大小 – 已经上传大小
* 剩余时间:剩余大小/速度
B* 如何实现监视上传进度:
* 使用ServletFileUpload提供的setProgressListener()方法实现.
3.29 *实现多文件上传页面:
A* 一个表单包含多个文件域.
同时选择多个需要上传的文件,一起提交上传.(问题:要么一起成功,要么一起失败)
B* 一个文件域一个上传,多个上传文件之间是独立的.(Ajax技术:异步交互)
二* 文件的下载:
1*如何使用文件下载:
1.1* 创建一个文件下载页面
当用户点击下载时,将请求提交服务器端的Servlet进行处理.
1.2*服务器端的Servlet实现的步骤:
* 获取客户端提交的下载文件名称.
* 获取对应存储下载文件的目录结构.
* 通过输入流读取对应下载文件内容.
* 获取Response对象的OutputStream输出流.
* 将读取的输入流,输出到Response对象的输出流,响应到客户端浏览器下载即可.
2*问题:
2.1* 设置当前下载文件的MIME类型.
response.setContentType(getServletContext().getMimeType(filename));
2.2* 设置通知浏览器当前下载文件必须提供下载选项
response.setHeader("Content-Disposition", "attachment;filename="+filename);
2.3* 下载中文乱码问题:
A*解决GET方式请求下载文件名的中文乱码:
new String(filename.getBytes("ISO-8859-1"),"utf-8");
B*下载对应文件时,下载文件名称中文乱码:
java web 文件上传_Javaweb学习笔记10—文件上传与下载相关推荐
- java web开发周志_javaweb学习笔记及周报告
第三周: 1.html(HyperText Markup Language:超文本标记语言 ):网页语言. (1)解释名词 a.超文本:超出文本的范畴,使用html可以轻松实现类似使文字带颜色的操作: ...
- java ee 上传文件_17.《JavaEE 学习笔记》Servlet 上传文件
功能介绍: 利用 Servlet 和表单提交,选择本地文件上传到服务器.上传的文件可以是文本文件或图像文件或任何文档,不能是文件夹. 需要引入的 jar 文件:commons-fileupload-1 ...
- Python+Selenium学习笔记10 - send_keys上传文件
在火狐浏览器上传文件 上传前,同一个HTML文件在火狐和Edge浏览器显示有些不同 这是Firefox浏览器的显示 这是Edge浏览器 上传后 1 # coding = utf-8 2 3 from ...
- python读取文件路径格式_Python学习笔记读写文件之文件与文件路径
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...
- python网络编程web教程_python网络编程学习笔记(10):webpy框架
django和webpy都是python的web开发框架.Django的主要目的是简便.快速的开发数据库驱动的网站.它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架 ...
- Web前端开发之CSS学习笔记10—栅格布局(网格布局)
目录 [网格布局grid] 1.网格布局的构成 2.父容器grid container 3.生成网格容器 display:grid/inline-grid 4.构建网格 grid-template-c ...
- nc65命令执行漏洞上传webshell学习笔记
nc65命令执行漏洞上传webshell学习笔记 免责声明: 此文为本人学习笔记,不承担任何法律责任. 访问者在从事与本站相关的所有⾏为(包括但不限于访问浏览.利⽤.转载.宣传介绍)时,必须以善意且谨 ...
- SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传
SpringMVC:学习笔记(10)--整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...
- MUI学习笔记之图片上传和预览
MUI学习笔记之图片上传和预览 源代码是从博客园下载 我一边学习,一边注释,力求理解 <head> <meta charset="UTF-8"> <m ...
最新文章
- 第十七届全国大学生智能车竞赛智能视觉组培训第一弹
- SAPScript和Smartform双面打印
- mysql 中文 问号 utf8_[MySql] 设置了UTF8,中文存数据库中仍然出现问号
- 微信(QQ)截图时,无法保留鼠标右键菜单选项内容
- jQuery 鼠标滚轮插件应用 mousewheel
- vue框架可以配合php做企业站,基于Vue和PHP打造前后端分离的通用管理系统(一)...
- Tensorflow 迁移学习 识别中国军网、中国军视网Logo水印
- NanoLog软件架构
- Django3与Vue3前后端分离搭建
- np.where与np.argwhere共同点与区别分析
- chap1统计学习及监督学习
- java+sql+用户登录失败,java.sql.SQLException:用户'sa'登录失败
- 公司网络上网慢排查项
- 读《创业36条军规》(三)学先进 傍大款 走正道
- jstl和el表达式
- 学术Assignment写作怎么了解文献内容?
- Verilog语言、语法
- 秦储一行拜访陕西省文联和陕西新华出版传媒集团
- ORACLE导入unl
- 两种构造最小生成树的算法(普里姆算法,克鲁斯卡尔算法)
热门文章
- matplotlib 绘图
- 46.逻辑卷管理1,lvm架构,概念,常用命令介绍
- JAVA文件上传 ServletFileUpLoad 实例
- c语言怎么弄小数点,数码管小数点
- c语言中assert函数,assert()函数用法总结
- ufs2.0测试软件,三星S8被爆混用UFS闪存 如何测试是UFS 2.0还是UFS 2.1?
- 15个小时做10个可视化大屏,科技感爆棚,我把方法和工具教你
- oracle的substr函数用法,Oracle的substr函数简单用法详解
- 文件传输请求最快的方式_实施块请求并更快地上传大文件30
- 分布式秒杀实战之订单数据分表