上篇文章写到了对文件进行批量上传,其中遇到一个问题,就是针对用户上传来的文件进行筛选删除
错误的写法:
/** 排除有误的图片 **/
List<MultipartFile> files = userBean.getNewPhoto();
for(MultipartFile file : files){
//名字是否合适
if(file.getName() == null && file.getName().equals("")){
files.remove(file);
continue;
}
//是否是图片
boolean isImg = FileUtil.filterType(file.getContentType());
if (!isImg) {
files.remove(file);
continue;
}
//是否大小合适
boolean isSuitableSize = FileUtil.filterFileSize(file);
if (!isSuitableSize) {
files.remove(file);
continue;
}
}
咋一看,好像没什么错,其实仔细一想,发现问题,每次删除完之后,那么List就少1,所以会出现错误
正确的写法:
/** 排除有误的图片 **/
List<MultipartFile> files = userBean.getNewPhoto();
Iterator<MultipartFile> iter= files.iterator();
while (iter.hasNext()){
MultipartFile file= iter.next();
//名字是否合适
if(file.getName() == null && file.getName().equals("")){
iter.remove();
continue;
}
//是否是图片
boolean isImg = FileUtil.filterType(file.getContentType());
if (!isImg) {
iter.remove();
continue;
}
//是否大小合适
boolean isSuitableSize = FileUtil.filterFileSize(file);
if (!isSuitableSize) {
iter.remove();
continue;
}
}
里面的小方法:
/**
* 过滤文件
*
* @param types
* @return
*/
public static boolean filterType(String type) {
for (String temp : FinalValues.userRegisterAllowFileTypeList) {
if (temp.equals(type)){
return true;
}
}
return false;
}
/**
* 过滤图片的大小
* @param multipartFile
* @return
*/
public static boolean filterFileSize(MultipartFile multipartFile) {
if(multipartFile.getSize() <0 || multipartFile.getSize() > FinalValues.MAX_ALBUM_PHOTO_SIZE){
return false;
}
return true;
}