文件的上传
来源:互联网 发布:皮卡超人升级数据 编辑:程序博客网 时间:2024/06/08 10:31
一.文件上传的三个前提
1.提供form表单 method必须是post
2.form表单的 enctype 必须是 enctype="multipart/form-data"
3.提供input type="file" 类的上传输入域
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 依赖包
两个包
commons-fileupload-1.2.2.jar 核心包
commons-io-2.2.jar 依赖包
2.创建工厂类DiskFileItemFactory对象
DiskFileItemFactory factory = new DiskFileItemFactory();
DiskFileItemFactory factory = new DiskFileItemFactory();
3.使用工厂创建解析器对象
ServletFileUpload fileUpload = new ServletFileUpload(factory);
4.使用解析器来解析request对象
List<FileItem> list = fileUpload.parseRequest(request);
List<FileItem> list = fileUpload.parseRequest(request);
FileItem对象 可以获取普通标签和上传标签
Fileitem的方法
1.boolean isFormField();判断当前表单标签是否为普通文本字段
如果返回false 说明是文件上传标签
如果返回true 说明是普通标签
如果返回false 说明是文件上传标签
如果返回true 说明是普通标签
2.String getFieldName() 获取标签名
3.String getString() 获取值
4.String getName() 获取上传域中添加的文件路径(绝对路径)
5.InputStream getInputStream() 获得输入流
6.void write(File) 把上传的文件保存到指定文件中
7.void delete()如果临时文件不能自动删除 可以使用该方法删除临时文件
4.String getName() 获取上传域中添加的文件路径(绝对路径)
5.InputStream getInputStream() 获得输入流
6.void write(File) 把上传的文件保存到指定文件中
7.void delete()如果临时文件不能自动删除 可以使用该方法删除临时文件
三.文件上传需要注意的问题
1.web不适合上传太大文件,有两个方法限制上传的文件的大小
设置单个文件的大小:
ServletFileUpload.setFileSizeMax(字节)
设置文件上传的总大小:
ServletFileUpload.setSizeMax(字节)
ServletFileUpload.setFileSizeMax(字节)
设置文件上传的总大小:
ServletFileUpload.setSizeMax(字节)
2.临时文件(如果上传的文件比较大 会产生一个临时文件 例如 电影的下载 先有一个临时文件 下载结束 临时文件清理)
DiskFileItemFactory.setRepository(设置临时文件存储位置)
//注意 不要写c盘 一般系统盘默认都设置了保护
临时文件:
相当于是一个缓存 缓存的大小是10kb 如果上传的文件超过10kb
用磁盘作为缓存 存放下载文件的缓存 默认是系统的临时目录
item.write(file);
把上传的文件保存到指定文件中 自动删除临时文件
DiskFileItemFactory.setRepository(设置临时文件存储位置)
//注意 不要写c盘 一般系统盘默认都设置了保护
临时文件:
相当于是一个缓存 缓存的大小是10kb 如果上传的文件超过10kb
用磁盘作为缓存 存放下载文件的缓存 默认是系统的临时目录
item.write(file);
把上传的文件保存到指定文件中 自动删除临时文件
3.判断表单是否支持文件上传
判断表单是否设置了enctype="multipart/form-data"
boolean ServletFileUpload.isMultipartContent(request)
支持 true 不支持 false
判断表单是否设置了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")设置编码集
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里面的类创建数据库)
阅读全文
0 0
- Struts的文件上传
- Struts的文件上传
- 关于文件的上传
- Struts的文件上传
- Struts的文件上传
- Struts的文件上传
- PHP文件的上传
- Struts的文件上传
- Struts的文件上传
- Struts的文件上传
- 文件的上传
- 上传文件的程序
- 文件上传的方法
- Struts的文件上传
- 文件上传的方法
- 文件上传的类
- Struts2的文件上传
- Struts的文件上传
- LeetCode556. Next Greater Element III
- Linux-centos下安装lvs+keepalived+nginx+tomcat
- OpenLayers3学习二:点标记的添加删除和修改(以类为接口)
- 线性表
- 从setTimeout到浏览器线程机制
- 文件的上传
- tomcat进行管理员身份认证
- HDU2577[How to Type] 动态规划
- 为什么使用 Redis及其产品定位
- matlab2c使用c++实现matlab函数系列教程-normrnd函数
- IDEA运行Maven项目部署tomcat上
- java反射之获取class对象的三种方式
- 从ActiveAndroid到Realm的爬坑之路(一)
- Aggressive cows