JSP中用Commons-FileUpload组件控制文件上传
2018-01-21 21:34 开发潜力 阅读(1061) 评论(0) 编辑 收藏 举报1.控制文件上传的类型
示例代码:
//解析form表单中所有文件
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> iter = items.iterator();
FileItem item = (FileItem)iter.next();
if (!item.isFormField()){//文件表单字段
String fileName = item.getName();
//通过Arrays类的asList()方法创建固定长度的集合
List<String> filType = Arrays.asList("jpeg","gif","jpg");
String ext = fileName.substring(fileName.lastIndexOf(".")+1);
if (!filType.contains(ext))//判断文件类型是否在允许范围内
out.print("上传失败,文件类型只能是gif、jpg、jpeg");
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类的asList()方法创建固定长度的集合,也就是得到允许文件类型的集合,然后通过集合的contains()方法匹配上传文件的扩展名来判断文件类型是否在允许范围内。
2.控制文件上传的大小
示例代码:
//创建临时文件目录路径
File tempPatchFile = new File("d:\\temp\\buffer\\");
if (!tempPatchFile.exists())//判断文件或目录是否存在
tempPatchFile.mkdirs();//创建指定的目录,包括所在必需但不存在的父目录
if (isMultipart){
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置缓冲区大小4KB
factory.setSizeThreshold(4096);
//设置上传文件用到临时文件存放路径
factory.setRepository(tempPatchFile);
ServletFileUpload upload = new ServletFileUpload(factory);
//设置一个完整请求的最大允许大小
upload.setSizeMax(5120);//5MB,大小不能超过5MB
}
while (iter.hasNext()){//依次处理每个文件
FileItem item = (FileItem)iter.next();
if (item.isFormField()){//普通表单字段
filedName = item.getFiledName();//表单字段的name属性值
if (filedName.equals("user")){
//输出表单字段的值
out.print(item.getString("UTF-8")+"上传了文件。<br/>");
}
}else{//文件表单字段
String fileName = item.getName();
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 (FileUploadBase.SizeLimitExceededException ex){
out.prtin("上传失败,文件太大,全部文件的最大限制是:"+upload.getSizeMax()+"bytes!");
}catch (Exception e){
e.printStackTrace();
}
}
上面代码中,创建临时文件目录路径,通过DisFileItemFactory对象的setSizeThreshold()方法设置缓冲区大小,当上传文件大小超过缓冲区大小,则临时存储在通过DiskFileItemFactory对象的setRepository()方法设置的临时文件目录路径中。同时通过ServletFileUpload对象的setSizeMax()限制了一个完整请求的最大字节数,如果超出设置的字节数,则会抛出一个FileUploadBase.SizeLimitExceededException类型的异常,并通过异常处理提示错误信息。