资源文件验证器--ResourceValidator

来源:互联网 发布:单片机中断向量地址是 编辑:程序博客网 时间:2024/06/05 22:36

可以验证file字段上传文件的格式大小是否正确

控制层用的SpringMVC框架,用MultipartFile接口file文件

验证用具类:

import java.util.ArrayList;import java.util.List;import org.springframework.web.multipart.MultipartFile;import com.clou.douliu.server.bean.Pair;/** * 资源验证器 * @author dhh * 2015-11-13 * */public class ResourceValidator {/**资源类型**/public static final int IMAGE = 1; public static final int AUDIO = 2;public static final int VEDIO = 3;/**相册照片最大大小 2M **/private static final int MAX_IMAGE_SIZE = 2 * 1024 * 1024; /**最大的音频类问题文件大小 1M **/private static final int MAX_AUDIO_FILE_SIZE = 1 * 1024 * 1024;/**最大的视频类问题文件大小 10M **/private static final int MAX_VEDIO_FILE_SIZE = 10 * 1024 * 1024;// 允许上传的图片类型private static final List<String> allowImageTypeList;private static final List<String> allowAudioTypeList;private static final List<String> allowVedioTypeList;static {allowImageTypeList = new ArrayList<String>();allowAudioTypeList = new ArrayList<String>();allowVedioTypeList = new ArrayList<String>();/**图片允许格式 **/allowImageTypeList.add("image/bmp");allowImageTypeList.add("image/png");allowImageTypeList.add("image/gif");allowImageTypeList.add("image/jpeg");allowImageTypeList.add("image/x-png");allowImageTypeList.add("image/pjpeg");allowImageTypeList.add("image/jpg");allowImageTypeList.add("image/*");/**语音允许格式**/allowAudioTypeList.add("audio/mp3");allowAudioTypeList.add("application/octet-stream"); //amr/**视频允许格式**/allowVedioTypeList.add("video/mp4");}/** * 是否是合法资源 * @param file 资源文件 * @param fileType 资源类型,分成3中,@see ResourceValidator 中的定义 * @return */public static Pair<Boolean,String> isValidResouce(MultipartFile file , Integer fileType){//检查file是否合法Boolean valid = false;if(file.getName() == null && file.getName().equals("")){return Pair.makePair(valid, "文件名不能为空");}if(fileType == IMAGE){if(!filterType(file.getContentType(),allowImageTypeList)){return Pair.makePair(valid, "图片格式不允许");}if(!filterFileSize(file , MAX_IMAGE_SIZE)){return Pair.makePair(valid, "图片大小不能超过" + (MAX_IMAGE_SIZE/1024) + "K");}}else if (fileType == AUDIO){if(!filterType(file.getContentType(),allowAudioTypeList)){return Pair.makePair(valid, "语音格式不允许");}if(!filterFileSize(file , MAX_IMAGE_SIZE)){return Pair.makePair(valid, "语音大小不能超过" + (MAX_AUDIO_FILE_SIZE/1024) + "K");}}else if(fileType == VEDIO){if(!filterType(file.getContentType(),allowVedioTypeList)){return Pair.makePair(valid, "视频格式不允许");}if(!filterFileSize(file , MAX_IMAGE_SIZE)){return Pair.makePair(valid, "视频大小不能超过" + (MAX_VEDIO_FILE_SIZE/1024) + "K");}}valid = true;return Pair.makePair(valid, "合法资源");}private static boolean filterType(String type ,List<String> library) {for (String temp : library) {if (temp.equals(type)){return true;}}return false;}/** * 过滤图片的大小 * @param multipartFile * @return */private static boolean filterFileSize(MultipartFile multipartFile , Integer size) {if(multipartFile.getSize() <0 || multipartFile.getSize() > size){return false;}return true;}}


Pair自定义可以返回两个参数的源码:

import java.io.Serializable;/** * 值对 * 方法需要返回两个值时,可使用Pair减少代码量 * @author rabbit * * @param <F> * @param <S> */public final class Pair<F, S> implements Serializable{private static final long serialVersionUID = 1L;public Ffirst;public Ssecond;public Pair(F f, S s){this.first = f;this.second = s;}/** * 通过值创建值对 * @param <FT> * @param <ST> * @param f * @param s * @return */public static <FT, ST> Pair<FT, ST> makePair(FT f, ST s){return new Pair<FT, ST>(f, s);}private static <T> boolean eq(T o1, T o2){return o1 == null ? o2 == null : o1.equals(o2);}@SuppressWarnings("unchecked")public boolean equals(Object o){Pair<F, S> pr = (Pair<F, S>) o;if(pr == null)return false;return eq(first, pr.first)&& eq(second, pr.second);}private int h(Object o){return o == null ? 0 : o.hashCode();}public int hashCode(){int seed = h(first);seed ^= h(second) + 0x9e3779b9 + (seed << 6) + (seed >> 2);return seed;}@Overridepublic String toString() {StringBuffer sb = new StringBuffer();sb.append("first=").append(first).append(".\t").append("second=").append(second);return sb.toString();}}






附录:

控制层SpringMVC的接口代码

/** * 环信推送 * @param broadcastBean * @param request * @param response * @param map * @return */@RequestMapping(value = "addEasemobPushTask.do")@ResponseBodypublic AjaxResponseBean addEasemobPushTask(        @ModelAttribute EasemobPushBean pushBean,        HttpServletRequest request, HttpServletResponse response, ModelMap map) {    // 得到当前session中的用户    User user =  this.getUserInSession(request);    // 权限验证    boolean flag = PermissionCheck.check(user, FinalValues.MAJIA_OPERATION_PERMISSION);    if (!flag) {        // 没有权限        return AjaxResponseBean.getNoPermissionResponseBean();    }    try {        // 将查询出的结果返回给客户端,    Pair<Integer, String> result = this.businessFactory.broadcastBusiness.addEasemobPushTask(pushBean);    Integer count = result.first;    if(count > 0){return AjaxResponseBean.getAjaxResponseBean(AjaxResponseBean.DWZ_STATUSCODE_OK, "添加【" + count +"】条推送任务成功");}else{return AjaxResponseBean.getAjaxResponseBean(AjaxResponseBean.DWZ_STATUSCODE_ERROR, result.second);}    } catch (Exception e) {        logger.error("添加推送任务失败" + e.getMessage());        e.printStackTrace();        return AjaxResponseBean.getErrorResponseBean();    }}


实体bean:

public class EasemobPushBean implements Serializable{private static final long serialVersionUID = 1L;private Integer msgType;   //消息类型private MultipartFile receivedExcelFile;   //excel为接受者idprivate Integer sendId ;  //发送者IDprivate Integer minTime;   //延迟最小时间private Integer maxTime;   //延迟最大时间//富文本消息private String content;//图文链接消息private String linkTitle;private String linkAddr;private String linkContent;private MultipartFile linkImages;   //图片文件//图片消息private MultipartFile images;   //图片文件//语音消息private MultipartFile audios;   //音频文件//视频消息private MultipartFile videos;   //视频文件private MultipartFile videosShot;   //视频文件缩略图}

1 0
原创粉丝点击