文件上传
    本质是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.有些时候可能上传的文件需要控制类型
    自己设计一个方法

    image.pngimage.png

    监听器:
    上传文件知识的补充 上传的同时监督一下进度
    upload对象
    image.png