用Commons-FileUpload组件控制文件上传

用Commons-FileUpload组件控制文件上传

控制文件长传的类型

在计算机中的文件可以划分出很多种类型,例如,图片就有JPG格式,GIF格式。CIF格式等,在上传文件时就需要对允许用户上传的文件类型进行控制。关键代码如下。

<%
<% 
		FileItem item=(FileItem) iter.next();
	if(!item.isFormField()){ //文件表单字段
		String fileName=item.getName();
	//通过Arrays类的asList()方法创建固定长度的集合
	List<String> fileType=Arrays.asList("gif","bmp","jpg");
	String ext=fileName.subString(fileName.lastIndexof(".")+1);
	if(!fileType.contains(ext)){// 判断文件类型是否在允许范围内
		out.print("上传失败,文件类型只能是gif,bmp,jpg");
	
	}else{
		if(fileName !=null && fileName.equals("")){
			File fullFile = new File(item.getName());
			File saveFile = new File(uploadFilePath,fullFile.getName());
			item.write(saveFile);
			uploadFileName=fullFile.getName();
			out.print("上传文件成功后的文件名是"+uploadFileName);
		}
	}
	}
	
	
	%>
%>

在上面的代码中我们使用到了Arrays类,此类包含用于操作数组(如排序和搜索)的各种方法,通过Arrays类的asList()方法创建固定长度的集合,也就是得到允许文件类型的集合,然后通过集合的contains()方法匹配上传文件的扩展名来判断文件类型是否在允许范围内。

控制文件上传的大小

在文件上传时除了要控制上传文件的类型,同时需要对上传文件的大小进行控制,关键实现代码如下。
<%
//…省略其他代码
//创建临时文件目录路径
File tempPatchFile = new File(“d:\temp\buffer\”);
if(!tempPatchFile.exists()){// 判断文件或目录是否存在
tempPatchFile.mkdirs();//创建指定的目录,包括所有必须但不存在的父目录

	}
	if(isMultipart){
		DiskFileItemFactory factory=new DiskFileItemFactory();
		//设置缓存区大小 4kB
		factory.setSizeThreshold(4096);
		//设置上传文件用到临时文件存放路径
		factory.serRepository(tempPatchFile);
		ServletFileUpload upload = new ServletFileUpload(factory);
		//设置一个完整请求的最大允许大小
		upload.setSizeMax(1024*30);
		try{
			//....省略其他代码
			if(fileName != null && !fileName.equals("")){
				File fullFile=new File(item.getName());
				File saveFile=new File(uploadFilePath,fullFile.getName());
				item.write(saveFile);
				uploadFileName=fullFile.getName();
				out.print("上传文件成功后的文件名是"+uploadFileName+",文件大小是:"+item.getSize()+"bytes!");
			}
			//......省略代码
		}catch(Exception e){
			out.print("上传失败,文件太大,全部文件的最大限制是:"+upload.getSizeMax()+"bytes!");
		}
		
	}
	
%>

运行代码,如果提交的文件大少超出了设置要求,那么系统会返回错误信息。
创建临时文件目录路径,通过DiskFileItemFactory对象的setSizeThreshold()方法设置缓存区大小,当上传文件大小超过缓冲区大小,则临时存储在通过DiskFileItemFactory对象的serRepository()方法设置的临时文件目录路径中。同时通过ServletFileUpload对象的setSizeMax()限制了一个完整请求的最大字节数,如果超出设置的字节数,则会抛出一个FileUploadBase.SizeLimitExceedeException类型的异常,并通过异常处理提示错误信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值