文件上传
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
3.自己的业务逻辑
通过遍历集合可以获取每一个item元素
FileItem item 元素可能是一个普通组件 可能是一个文件
item.isFormField();方法可以判断是否是一个普通文件
如果item是一个普通的组件
注意:不能用原生的方式获取参数request.getParameter();
使用如下方式获取
String = item.getFieldName();获取组件的name属性
String = item.getString();获取组件的value属性
注意:不能使用原生的方式处理中文request.setCharacterEncoding();
使用如下方式处理