commons-fileupload-1.2同时上传文件和文字的servlet实例(原创)

自己的系统中需要同时上传文件和多个name相同的文本,找了很久都没有相关的实例,没办法,只有自己根据Commons-fileupload官方的UserGuide写一个,花了半天时间。。。。希望对各位有同样需求的人士有用,呵 :)

public   void  doPost(HttpServletRequest request, HttpServletResponse response)
throws  ServletException, IOException {

response.setContentType(
" text/html " );
response.setCharacterEncoding(
" gb2312 " );
PrintWriter out 
=  response.getWriter();
try {
// boolean isMultipart;
List city = new  ArrayList( 1 );  // 用于保存文字的列表

if (ServletFileUpload.isMultipartContent(request)){

DiskFileItemFactory factory
= new  DiskFileItemFactory();
factory.setSizeThreshold(
20 * 1024 ); // 设置缓存的大小,20K
factory.setRepository(factory.getRepository());  ;          // 缓存目录/文件;
ServletFileUpload upload = new  ServletFileUpload(factory);
upload.setFileSizeMax(
20 * 1024 * 1024 ); // 最大文件,20M

List formlists
= upload.parseRequest(request);

Iterator iter
= formlists.iterator();  
 
while (iter.hasNext()){   // 循环获取表单中的内容

FileItem formitem
= (FileItem)iter.next();


if  (formitem.isFormField()){   // 如果是文本内容
String formname = formitem.getFieldName(); // 获取form中的名字
String formcontent = formitem.getString();
formname
= new  String(formname.getBytes(), " gb2312 " );
formcontent
= new  String(formcontent.getBytes(), " gb2312 " );
if  (formname.equals( " city " )){
city.add(formcontent);
}


}
else  {        // 如果是文件,则保存文件


String fieldName 
=   new  String(formitem.getFieldName().getBytes(), " gb2312 " );
filename
= new  String(formitem.getName().getBytes(), " gb2312 " );
//
filename = filename.substring(filename.lastIndexOf( " / " ) + 1 );
// 获取纯粹的文件名


long  sizeInBytes  =  formitem.getSize();
boolean  isInMemory  =  formitem.isInMemory();   // 文件是否在内存中(在内存中,也有对应方法)
File savefile = new  File(request.getRealPath( " / " + filename));     // 创建文件

formitem.write(savefile);   
// 写入文件

}
}

if  ( ! city.isEmpty()){  // 判断提交的表单内容是否为空
for  ( int  i = 0 ;i <= city.size() - 1 ;i ++ ){  


out.println((String)city.get(i));
}



out.println(
" <div align=center>提交已经成功!</div> " );
out.println(
" <div align=center><a href='advise/advise_add_new.jsp'>返回</a></div> " );
  }
}
catch  (Exception e){
out.println(e.toString());
}
out.flush();
out.close();
return ;
}

此示例为 servlet 的doPost()方法
根据此示例可以同时上传文件和普通文本资料。
在tomcat5.
5 .17下运行正常。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值