资源文件验证器--ResourceValidator

可以验证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 F	first;
	public S	second;
	
	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;
	}
	
	@Override
	public 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")
@ResponseBody
public 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为接受者id
	private Integer sendId ;  //发送者ID
	private 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值