文件上传
本质是IO读写
浏览器发送文件内容 本地文件流读取内容 网络输出流内容发出去
服务器接收文件内容 网络输入流读取内容 本地输出流文件写在服务器里
基本的流程
1.下载jar包 apache官网下载 commons-fileupload-1.4.jar
commons-io-2.6.jar
2.浏览器端
必须使用form表单
必须是post方式提交
表单中必须添加enctype属性 multipart/form-date
3.服务器端
写一个controller
创建一个DiskFileItemFactory
创建一个ServletFileUpload对象(factory)
通过upload对象解析request List
item.isFormField();判断当前的item是否是一个普通组件
item.getFieldName();
item.getString(“UTF-8”);
如果item判断后是一个文件
读取文件的内容
item.getInputStream();
item.write(File file);
4.如果上传的文件较大
产生临时文件 为了防止丢包
默认情况下存在tomcat的temp文件夹中
factory.setSizeThreshold(1024000);//设置缓冲区大小 默认10240
factory.setRepository(new File(“路径”));//设置缓冲区位置
还可以设置上传文件本身的大小
upload.setFileSizeMax();//单个上传文件的大小 1M
upload.setSizeMax();//上传文件的总大小 3M
小总结
文件上传需要注意的事情
1.浏览器端需要满足三个条件 form表单 post请求 enctype属性 file组件(多个)
2.服务器端需要满足 factory工厂对象 upload对象 解析request方法 List
3.上传文件保存的路径
放在一个固定的位置D://test 可移植性不好
放在当前工程的根目录下
String path = this.getServletContext().getRealPath(“/“);根目录
4.最好限制一下文件上传的大小 单个 总体 缓冲区
5.如果文件上传出现文件名冲突的问题?
原来名字+用户+时间.原来后缀
1_zzt_date.jpg
用一个随机产生的名字当做保存在服务器中的文件名
1.jpg—->xxxxx.jpg 1 xxxxx 路径 用户 上传时间
一个随机名字创建一个文件夹
1.jpg放在文件夹里 用户 路径 文件夹名
6.有些时候可能上传的文件需要控制类型
自己设计一个方法
监听器:
上传文件知识的补充
上传的同时监督一下进度
upload对象