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<fileitem>类型
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<fileitem> 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();
}
}