学习文件上传和下载

文件上传下载

文件上传

|---------------------------------------------------------------------|
| 文件上传的应用 比如个人信息的管理,上传头像 比如商品信息的管理,上传商品的图片 这些都需要通过浏览器客户端将图片上传到服务器的磁盘上 |

文件上传原理

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 所谓的文件上传就是服务器端通过request对象获取输入流,将浏览器端上传的数据读取出来,保存到服务器端 客户端浏览器注意事项 1.请求方式必须是 post 2.需要使用组件<input type="file" name="file"> 3.表单必须设置enctype="multipart/form-data" 服务器端处理 通过request对象,获取InputStream, 可以将浏览器提交的所有数据读取到. |

上传开源框架-commons-upload

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Apache 开源组织提供了一个用来处理表单文件上传的一个开源组件( Commons-fileupload ),该组件性能优异,并且其API使用极其简单,可以让开发人员轻松实现web文件上传功能,因此在web开发中实现文件上传功能,通常使用Commons-fileupload组件实现。 使用Commons-fileupload组件实现文件上传,需要导入该组件相应的支撑jar包:Commons-fileupload和commons-io, commons-io 不属于文件上传组件的开发jar文件,但Commons-fileupload 组件从1.1 版本开始,它工作时需要commons-io包的支持 |

文件上传案例

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 在浏览器端创建一个可以上传文件的表单,在服务器端通过commons-fileupload完成文件上传。 浏览器端注意三件事情: 1.表单的method=post 2.设置enctype=multipart/form-date 3.使用具有name属性的file元素 在服务器端 1.创建DiskFileItemFactory 2.创建ServletFileUpload 3.通过ServletFileUpload的parseRequest方法得到所有的FileItem 1.设置浏览器端 <form action="Upload" method="post" enctype="multipart/form-data" > <input type="file" name="photo" /> <input type="submit" value=" 上传 " /> </form> 2.在服务器端操作 关键类: DiskFileItemFactory:ServletFileUpload工厂类 ServletFileUpload:用于处理文件上传的类 IOUtils:文件上传IO流类 BeanUtils:存储表单内文本信息类 //设置乱码 upload.setHeaderEncoding("UTF-8"); 完善细节 1. 设置保存上传文件的服务器目录 1. 解决上传文件名是中文的问题,通过item.getName()获取到文件的名称 1. 直接将其改名,不用原来的名字 2. 保存其中文的名字(注意,一般如果是压缩文件供下载的资源,则可以考虑保留其中文名称,否则一般图片直接展示用的,不建议用中文名来保存) |

思考题:文件名重复了怎么办?

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 问题:覆盖 解决方案: 客户端参与 1,方案一:做个文件名的唯一性校验,告诉客户端,这个文件名已经存在(不建议) 服务端解决 1,方案二:重新取个名字(唯一性:时间、UUID)---图片资源 利用时间保证唯一性:System.currentTimeMillis() 利用UUID保证唯一性: 2,方案三:下载电影压缩包,水野朝阳.zip 保留原有的名字 2016\10\18\103819\3天精通Java |

获取完整的表单数据

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 保存一个完整的表单信息,除了将文件上传到服务器以外,还需要将其他表单项信息保存到对象,并存储到数据中心,而对应的图片信息则保存为保存的路径即可。 那么怎么获取到其他的表单项数据?item.getFileName(),item.getString() 为了更好完成对其他表单项的值的获取,需要借助另一个开源框架 BeanUtils 它除了自身的jar包,还依赖于commons-logging.jar 细节: 有复选框的情况怎么办? |

多文件上传案例

|---------------------------------------------------------------------------------------|
| 实现多文件的批量上传 Ps:展示图片-"upload" + File.separator + datePath + File.separator + filename); |

文件下载

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 主要实现方式有两种 1. 超链接下载 2. 以超练级的方式下载压缩文件 3. 以超链接的方式下载图片文件 4. 以超链接的方式下载中文文件名的文件 5. Servlet下载 有些超链接搞不定的事情就交给Servlet来搞定 采用流的方式来读和写 设置响应的头部信息(告诉客户端是以附件的形式下载) response.setHeader("Content-disposition", "attachment;fileName="+fileName); 细节: 下载的文件名是中文怎么办? |

相关推荐
晓数1 小时前
【硬核干货】JetBrains AI Assistant 干货笔记
人工智能·笔记·jetbrains·ai assistant
我的golang之路果然有问题1 小时前
速成GO访问sql,个人笔记
经验分享·笔记·后端·sql·golang·go·database
lwewan1 小时前
26考研——存储系统(3)
c语言·笔记·考研
搞机小能手2 小时前
六个能够白嫖学习资料的网站
笔记·学习·分类
nongcunqq2 小时前
爬虫练习 js 逆向
笔记·爬虫
汐汐咯3 小时前
终端运行java出现???
笔记
无敌小茶4 小时前
Linux学习笔记之环境变量
linux·笔记
帅云毅5 小时前
Web3.0的认知补充(去中心化)
笔记·学习·web3·去中心化·区块链
豆豆5 小时前
day32 学习笔记
图像处理·笔记·opencv·学习·计算机视觉
nenchoumi31195 小时前
VLA 论文精读(十六)FP3: A 3D Foundation Policy for Robotic Manipulation
论文阅读·人工智能·笔记·学习·vln