使用commons-fileupload
1.导入jar包
commons-fileupload-1.2.1.jar 文件上传
commons-io-1.4.jar 它是提供的io工具.
介绍commons-fileupload
它有三个核心
1.DiskFileItemFactory类
2.ServletFileUpload类
3.FileItem
2.快速入门:
1.创建upload2.jsp页面
2.创建Upload2Servlet
1.创建一个DiskFileItemFactory
DiskFileItemFactory factory=new DiskFileItemFactory();
2.创建ServletFileUpload类
ServletFileUpload upload=new ServletFileUpload(factory);
3.解析所有上传数据
List items = upload.parseRequest(request);
3.了遍历items集合,集合中的每一项,就是一个上传数据.
1.isFormField();
2.getFieldName();
返回值String,得到组件名称
3.getName();
返回值是String,得到的是上传文件的名称.
注意:浏览器不同,它们得到的效果不一样。
1.包含全路径名称 例如: C:\Users\Administrator\Desktop\a.txt
2.只包含上传文件名称 例如:a.txt
4.getString();
这个方法可以获取非上传组件的内容,相当于 getParameter方法作用。
如果是上传组件,上传的文件是文本文件,可以获取到文件文件的内容。
但是如果不是文件文件,例如:是一张图片,这样获取合适吗?
5.获取上传文件的内容,保存到服务器端.
item.getInputStream();它是用于读取上传文件内容的输入流.
使用文件复制操作就可以完成文件上传。
IOUtils.copy(item.getInputStream(), fos);
关于文件上传的注意事项:
1.上传文件在服务器端保存位置问题
1.保存在可以被浏览器直接访问的位置
例如:商城的商品图片
保存在工程的WebRoot下的路径(不包含META-INF以及WEB-INF目录及其子目录)
2.保存在不能被浏览器直接访问的位置
例如:付费的视频。
1.工程中 META-INF WEB-INF目录及其子目录
2.不在工程中的服务器的磁盘目录下.
------------------------------------------------
2.上传文件在同一个目录重名问题
在开发中解决这个问题,可以给上传文件起随机名称。
1.使用毫秒值
2.使用uuid