fileupload控件上传文章(分享fileupload获取文件路径)
一、什么是fileUpload?
fileUpload是apache的commons组件提供的上传组件,它最主要的工作就是帮我们解析request.getInpustream()。可以参考在线API文档:
http://tool.oschina.net/apidocs/apidoc?api=commons-fileupload
二、fileupload组件工作原理
三、fileupload核心API
1. DiskFileItemFactory
构造器
1) DiskFileItemFactory() // 使用默认配置
2) DiskFileItemFactory(int sizeThreshold, File repository)
sizeThreshold 内存缓冲区, 不能设置太大, 否则会导致JVM崩溃
repository 临时文件目录
2. ServletFileUpload
1) isMutipartContent(request) // 判断上传表单是否为multipart/form-data类型 true/false
2) parseRequest(request) // 解析request, 返回值为List类型
3) isFormField() //是否是普通文件
4) setFileSizeMax(long) // 上传文件单个最大值 fileupload内部通过抛出异常的形式处理, 处理文件大小超出限制, 可以通过捕获这个异常, 提示给用户
5) setSizeMax(long) // 上传文件总量最大值
6) setHeaderEncoding(String) // 设置编码格式
四、实现过程
1.导入jar包
2.编写jsp
3.编写servlet
//创建业务层对象
NewsService newsService = new NewsService();
InputStream in = null;
OutputStream out = null;
int id = 0;//页面传来的id值
//创建解析器工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//获取解析器
ServletFileUpload upload = new ServletFileUpload(factory);
// 上传表单是否为multipart/form-data类型
if(!upload.isMultipartContent(request)) {
return ;
}
//解析request的输入流
try {
List parseRequest = upload.parseRequest(request);
//迭代list
for(FileItem f:parseRequest) {
if(f.isFormField()) {
//普通字段
id = Integer.parseInt(f.getFieldName());
String value = f.getString();
System.out.println(“name”+”=”+value);
}else {
//上传文件
//获取上传文件名
String name = f.getName();
System.out.println(“文件名”+name);
name = name.substring(name.lastIndexOf(“\”)+1);
System.out.println(name);
//获取输入流
in = f.getInputStream();
//获取上传文件路径
String savePath = “D:\workspacedt91\FileUpLoadTestDemo\WebContent\images\”+name;
//上传文件名若不存在, 则先创建
File path = new File(savePath);
if(!path.exists()) {
path.getParentFile().mkdir();
}
//获取输出流
out = new FileOutputStream(path);
int len = 0;
byte[] b = new byte[1024];
while((len = in.read(b)) > 0) {
out.write(b,0,len);
}
System.out.println(“上传成功”);
//保存到数据库
int count = newsService.saveUrl(name, id);
if(count > 0 ) {
System.out.println(“路径保存成功”);
}else {
System.out.println(“路径保存失败”);
}
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
System.out.println(“上传失败”);
e.printStackTrace();
}finally {
if(in != null) {
in.close();
}
if(out != null) {
out.close();
}
}
-
无相关信息
- 1bat的大数据(BAT的大数据来源)
- 2三星s8屏幕上端2(三星s8屏幕上端2个按键)
- 3三星屏幕坏了如何导出(三星屏幕摔坏了如何导出数据么)
- 4红米3x怎么关闭自动更新(红米k40s怎么关闭自动更新)
- 5微信上防止app自动下载软件怎么办(微信上防止app自动下载软件怎么办啊)
- 6押镖多少钱(押镖一个月有多少储备金)
- 7瑞星个人防火墙胡功能(瑞星个人防火墙协议类型有哪些)
- 8cf现在等级是多少(cf等级2020最新)
- 9老滑头多少条鱼(钓鱼老滑头有什么用)
- 10WPS自动调整语法(wps如何修改语法)
- 11dell控制面板防火墙(dell的防火墙怎么关闭)
- 12丑女技能升多少(丑女技能需要满级吗)
- 13智能家居系统怎么样(智能家居系统好吗)
- 14戴尔屏幕(戴尔屏幕闪烁)
- 15y85屏幕信息(vivoy85息屏显示时间怎么设置)
- 16魅蓝note3屏幕出现方格(魅蓝note屏幕竖条纹)
- 17v8手指按屏幕(触屏手指)
- 18金为液晶广告机(液晶广告机lb420)
- 19三星显示器怎么校色(三星显示器 调色)
- 20hkc显示器dvi音频(hkc显示器有音响么)
- 21康佳液晶智能电视机(康佳液晶智能电视机怎么样)
- 22做液晶画板电脑(做液晶画板电脑怎么操作)
- 23液晶屏极化现象原理(液晶屏极化现象原理是什么)
- 24企业网络安全防火墙(企业网络防护)
- 256splus黑屏屏幕不亮(苹果6s plus屏幕突然黑屏)
- 26充电导致屏幕失灵(充电导致屏幕失灵怎么办)
- 27超极本屏幕旋转(笔记本电脑屏幕旋转,怎么转过来?)
- 28igmp防火墙(防火墙配置ipv6)
- 29荣耀王者多少经验(王者荣耀经验多少一级)
- 30lol老将还剩多少(qg老将)