Servlet文件上传——用commons-fileupload包

在web应用中,要实现一个上传文件的功能,使用Servlet+commons-fileupload包的组合方式。

需要包:commons-fileupload.jar  commons-io.jar

这个commons-fileupload其实在struts2等一些框架中都集成好了的,相应地一些配置可以在struts2等框架的配置文件xml中进行设定,比如文件上传大小限制等。

如果没有使用这些框架,只是纯粹的servlet,那么设定上传文件大小等操作是需要手工在servlet中设定的。

相应的doPost方法,我是这样写的:

//创建硬盘工厂,用于配置上传参数
DiskFileItemFactory factory = new DiskFileItemFactory();

//设定上传文件的存储路径
factory.setRepository(uploadPath);

//创建上传文件组件handler
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");//防乱码

//设定上传文件大小为10MB
//如果不设定,默认值为-1表示无限大
final long MAX_SIZE=1024*1024*10;
upload.setFileSizeMax(MAX_SIZE);

//获取上传的文件,如果超过指定大小那么提示出错
List<FileItem> items = null;
// Parse the request
try{
    items = upload.parseRequest(request);
} catch (FileUploadException e) {// 处理文件尺寸过大异常
    if (e instanceof FileSizeLimitExceededException) {
	out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");
	out.println("<a href=\"index.html\" target=\"_top\">返回</a>");
	return;
    }
    e.printStackTrace();
}


//文件大小正常,那么逐一处理
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
    FileItem item = iter.next();
	
    if (!item.isFormField()) {
	String filename=item.getName();//文件名
	String value=item.getString("UTF-8");//文件内容
	String contentType=item.getContentType();//文件类型
	boolean isInMemory=item.isInMemory();//文件是否在内存中
	long sizeInBytes=item.getSize();//文件大小
					    
	//保存文件:项目部署根路径+上传文件存储目录+文件名
	item.write(new File(uploadPath, filename));

	//begin:替换当前系统的换行符为<br/>
	String lineSeparator = System.getProperty("line.separator");
	String result=value.replaceAll(lineSeparator, "<br/>");
	//end

	//输出所上传文件的信息
	out.print("filename:"+filename+"<br/>"+
		  "contentType:"+contentType+"<br/>"+
		  "isInMemory:"+isInMemory+"<br/>"+
		  "sizeInBytes:"+sizeInBytes+"<br/>");
    }
}
} catch(Exception e){
      e.printStackTrace();	
      RequestDispatcher dispatcher = request.getRequestDispatcher("/error.html");
      dispatcher.forward(request, response);
  }


转载于:https://my.oschina.net/u/869489/blog/374888

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值