文件的上传

一.文件上传的三个前提

1.提供form表单 method必须是post
2.form表单的 enctype 必须是 enctype="multipart/form-data"
3.提供input type="file" 类的上传输入域
   
即:
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="imgurl" id="up"/>
</form>
注意:
如果使用了 enctype="multipart/form-data",那么servlet中的getParameter(String)就会失效
因为上传表单已经不再是字符内容 而是字节内容,getParameter(String)得到的所有都是是字符内容

二.实现文件上传的步骤

1.导入jar包
两个包
commons-fileupload-1.2.2.jar 核心包
commons-io-2.2.jar 依赖包
2.创建工厂类DiskFileItemFactory对象
DiskFileItemFactory factory = new DiskFileItemFactory();
3.使用工厂创建解析器对象
ServletFileUpload fileUpload = new ServletFileUpload(factory);
4.使用解析器来解析request对象
List<FileItem> list = fileUpload.parseRequest(request);

FileItem对象 可以获取普通标签和上传标签
Fileitem的方法
1.boolean isFormField();判断当前表单标签是否为普通文本字段 
如果返回false 说明是文件上传标签
如果返回true 说明是普通标签
2.String getFieldName() 获取标签名
3.String getString() 获取值
4.String getName() 获取上传域中添加的文件路径(绝对路径)
5.InputStream getInputStream() 获得输入流
6.void write(File) 把上传的文件保存到指定文件中
7.void delete() 如果临时文件不能自动删除 可以使用该方法删除临时文件

三.文件上传需要注意的问题

1.web不适合上传太大文件,有两个方法限制上传的文件的大小
设置单个文件的大小:
ServletFileUpload.setFileSizeMax(字节)
设置文件上传的总大小:
ServletFileUpload.setSizeMax(字节)
2.临时文件(如果上传的文件比较大 会产生一个临时文件 例如 电影的下载 先有一个临时文件 下载结束 临时文件清 理)
DiskFileItemFactory.setRepository(设置临时文件存储位置)
//注意 不要写c盘 一般系统盘默认都设置了保护 
临时文件:
相当于是一个缓存 缓存的大小是10kb 如果上传的文件超过10kb
用磁盘作为缓存 存放下载文件的缓存 默认是系统的临时目录
item.write(file);
把上传的文件保存到指定文件中 自动删除临时文件
     3.判断表单是否支持文件上传
判断表单是否设置了enctype="multipart/form-data"
boolean ServletFileUpload.isMultipartContent(request)
支持 true 不支持 false
4.解决中文乱码问题
1.解决上传框的中文乱码
写法1 设置请求编码集
req.setCharacterEncoding("utf-8");
写法2 使用第三方jar包中的功能
void ServletFileUpload.setHeaderEncoding("utf-8")


2.解决普通文本框中文乱码
写法1 按照getBytes方法转码
value = new String(value.getBytes("iso-8859-1"),"utf-8");
写法2 使用第三方jar包中的功能
FileItem.getString("utf-8")设置编码集


代码已打包(没有数据库文件,bug已全部解决,可以根据bean里面的类创建数据库)


猜你喜欢

转载自blog.csdn.net/hokinhu/article/details/77898616