文件上传
    1.本质 : I/O读写
    客户端(浏览器)发送文件 HTTP协议
    文件的内容写出去 客户端本地输入流 内容 网络输出流
    服务器(Web容器)接受文件 协议
    文件的内容读过来 网络输入流 内容 服务器本地输出流
    2.可以使用别人写好的包来进行文件上传
    常用的是apache组织提供的一个包
    commons-fileupload.jar
    commons-io.jar
    去官方网站下载
    www.apache.org
    下拉至最下面 点击commons
    选择下载fileupload和io
    3.上传的步骤
    浏览器端
    1.写一个jsp/html做展示(选择某一个文件)
    2.必须通过表单提交
    3.必须使用post方式
    规定:ServletFileUpload类中一个属性 post
    字节数:
    get没有限制,肯定通过URL拼串儿
    每一个不同浏览器对于URL处理长度有所不同
    IE 2048+35 IE 4076
    Google 8182 FireFox 65535
    Safari 80000 Opera 190000
    post没有限制,需要web容器的支持,跟容器的处理性能有关
    比如Tomcat,没有限制,可以通过配置文件
    server.xml
    4.以前的表单只有两个属性 action method=”post”
    如果想要做文件上传 表单中必须再添加一个属性
    enctype=”multipart/form-date”
    5.必须使用通过这个组件让用户选择上传的文件
    不仅仅能得到文件名 将文件的内容读出来
    服务器端
    1.引入文件上传需要的jar包
    commons-fileupload-1.4.jar
    commons-io-2.6.jar
    2.使用一个DiskFileItemFactory对象
    DiskFileItemFactory factory = new DiskFileItemFactory();
    使用一个ServletFileUpload对象 包含一个factory
    ServletFileUpload upload = new ServletFileUpload(factory);
    使用upload对象解析request 得到一个List
    List itemList = upload.parseRequest(request);
    3.自己的业务逻辑
    通过遍历集合可以获取每一个item元素
    FileItem item 元素可能是一个普通组件 可能是一个文件
    item.isFormField();方法可以判断是否是一个普通文件
    如果item是一个普通的组件
    注意:不能用原生的方式获取参数request.getParameter();
    使用如下方式获取
    String = item.getFieldName();获取组件的name属性
    String = item.getString();获取组件的value属性
    注意:不能使用原生的方式处理中文request.setCharacterEncoding();
    使用如下方式处理
    image.png