欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

fileupload控件上传文章(分享fileupload获取文件路径)

程序员文章站 2023-11-18 10:03:58
一、什么是fileupload?fileupload是apache的commons组件提供的上传组件,它最主要的工作就是帮我们解析request.getinpustream()。可以参考在线api文档...

一、什么是fileupload?

fileupload是apache的commons组件提供的上传组件,它最主要的工作就是帮我们解析request.getinpustream()。可以参考在线api文档:
http://tool.oschina.net/apidocs/apidoc?api=commons-fileupload

二、fileupload组件工作原理

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包

fileupload控件上传文章(分享fileupload获取文件路径)

2.编写jsp

fileupload控件上传文章(分享fileupload获取文件路径)

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();

}

}