Java实现多种格式上传视频资源、解析视频格式、视频截图处理

采用SSM框架技术,其中涉及模块,根据网上一些博客因个人项目而整理开发,可作为他人开发参考
本人开发参考:https://zoutao.blog.csdn.net/article/details/81747046

1、处理工具类及配置文件

(1)配置文件serviceconfig.properties

本地目录文件,Linux环境可更换配置

#临时的视频存储路径,转码完成后删除
TEMPORARY_VIDEO_PATH=D:/zhongjianjian/temp/
#转码成功mp4视频存放路径
TRANSCODE_VIDEO_MP4PATH=D:/zhongjianjian/finshvideo/
#转码ffmpeg.exe工具路径
FFMPEG_PATH=D:/zhongjianjian/tools/ffmpeg.exe
#转码mencoder.exe工具路径
MENCODER_PATH=D:/zhongjianjian/tools/mencoder.exe
#视频截图存放路径
filePath=D:/zhongjianjian/views/static/

(2)加载静态资源服务类

ResourceService.java 方便用于加载配置文件 serviceconfig.properties 中的变量

package com.sslt.utils;

import java.util.Enumeration;
import java.util.ResourceBundle;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 加载静态资源服务
 * @author 
 *
 */
public class ResourceService {
   
	
private final static Logger logger = LoggerFactory.getLogger(ResourceService.class);
	
	/** 参数配置文件  */
	public static ResourceBundle rb = null;
	
	/**
	 * 项目启动系统所需配置文件,仅此一次
	 */
	static{
   
		rb = ResourceBundle.getBundle("serviceconfig");
	}
	
	public static void refresh() {
   
		logger.info("开始重载serviceconfig配置文件......");
		ResourceBundle.clearCache();
		rb = ResourceBundle.getBundle("serviceconfig");
		logger.info("检查serviceconfig文件是否重载完成......");
		Enumeration<String> keys = rb.getKeys();
		while(keys.hasMoreElements()){
   
			String key = keys.nextElement();
			String value = rb.getString(key);
			logger.info("serviceconfig配制已经重载--> "+key + " : " + value);
		}
		logger.info("serviceconfig配制文件重载完成!");
		
	}
}

(3)自定义响应类

ResultBean.java 作为统一响应数据格式

package com.sslt.common;

/**
 * 自定义响应结构
 */
public class ResultBean {
   

	// 响应业务状态
    private Integer status;

    // 响应消息
    private String msg;

    // 响应中的数据
    private Object data;

    public static ResultBean build(Integer status, String msg, Object data) {
   
        return new ResultBean(status, msg, data);
    }

    public static ResultBean success(Object data) {
   
        return new ResultBean(data);
    }

    public static ResultBean success() {
   
        return new ResultBean(null);
    }

    public ResultBean() {
   

    }

    public static ResultBean build(Integer status, String msg) {
   
        return new ResultBean(status, msg, null);
    }

    public ResultBean(Integer status, String msg, Object data) {
   
        this.status = status;
        this.msg = msg;
        this.data = data;
    }

    public ResultBean(Object data) {
   
        this.status = 200;
        this.msg = "SUCCESS";
        this.data = data;
    }
    
    public Integer getStatus() {
   
        return status;
    }

    public void setStatus(Integer status) {
   
        this.status = status;
    }

    public String getMsg() {
   
        return msg;
    }

    public void setMsg(String msg) {
   
        this.msg = msg;
    }

    public Object getData() {
   
        return data;
    }

    public void setData(Object data) {
   
        this.data = data;
    }

    
}

响应码工具类 GlobalState.java,可配置统一静态变量

package com.sslt.common;

/**
 * 静态变量工具类
 * @author MINI
 *
 */
public class GlobalState {
   
	
	public static final Integer RESULTSTATUS = 200;           // 默认返回成功状态码
	public static final Integer FAILSTATUS = 401;             // 失败状态
	public static final Integer PASTSTATUS = 400;             // 过期状态
	
}

(4)文件校验类

FileUploadToolUtil.java 检测文件类型包括图片和视频格式,检测文件格式是否支持、大小和不能为空

package com.sslt.utils;

import java.io.File;
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.multipart.MultipartFile;

import com.sslt.common.GlobalState;
import com.sslt.common.ResultBean;

/**
 * 文件校验
 * @author MINI
 *
 */
public class FileUploadToolUtil {
   
	
	// 文件最大500M
    private static long upload_maxsize = 500 * 1024 * 1024;
    // 文件允许格式
    private static String[] allowFiles = {
    ".rar", ".doc", ".docx", ".zip",
            ".pdf", ".txt", ".swf", ".xlsx", ".gif", ".png", ".jpg", ".jpeg",
            ".bmp", ".xls", ".mp4", ".flv", ".ppt", ".avi", ".mpg", ".wmv",
            ".3gp", ".mov", ".asf", ".asx", ".vob", ".wmv9", ".rm", ".rmvb" };
    
	public static ResultBean createFile(MultipartFile multipartFile, HttpServletRequest request) {
   
    	Integer status = GlobalState.RESULTSTATUS;
		String msg = "";
        String fileName = multipartFile.getOriginalFilename().toString();
        // 判断文件不为空
        if (multipartFile.getSize() != 0 && !multipartFile.isEmpty()) {
   
            // 判断文件大小
            if (multipartFile.getSize() <= upload_maxsize) {
   
                // 文件类型判断
                if (!checkFileType(fileName)) {
   
                	status = GlobalState.FAILSTATUS;
                	msg = fileName + "文件,系统暂不支持" + fileName.substring(fileName.lastIndexOf("."),fileName.length()) + "的文件格式!";
                }
            } else {
   
            	status = GlobalState.FAILSTATUS;
            	msg = "文件大小超范围";
            }
        } else {
   
        	status = GlobalState.FAILSTATUS;
        	msg = "上传文件不能为空";
        }
        
        return ResultBean.build(status, msg);
        
    }

    /**
     * 文件类型判断
     *
     * @param fileName
     * @return
     */
    public static boolean checkFileType(String fileName) {
   
        Iterator<String> type = Arrays.asList(allowFiles).iterator();
        while (type.hasNext()) {
   
            String ext = type.next();
            if (fileName.toLowerCase().endsWith(ext)) {
   
                return true;
            }
        }
        return false;
    }

    /**
     * 获取文件扩展名
     *
     * @return string
     */
    public static String getFileExt(String fileName) {
   
        return fileName.substring(fileName.lastIndexOf("."));
    }

    /**
     * 依据原始文件名生成新文件名
     * @return
     */
    public static String getName(String fileName) {
   
        Iterator<String> type = Arrays.asList(allowFiles).iterator();
        while (type.hasNext()) {
   
            String ext = type.next();
            if (fileName.contains(ext)) {
   
                String newFileName = fileName.substring(0, fileName.lastIndexOf(ext));
                return newFileName;
            }
        }
        return "";
    }

    /**
     * 文件大小,返回kb.mb
     *
     * @return
     */
    public static String getSize(File file) {
   
        String size = "";
        long fileLength = file.length();
        DecimalFormat df = new DecimalFormat("#.00");
        if (fileLength < 1024) {
   
            size = df.format((double) fileLength) + "BT";
        } else if (fileLength < 1048576) {
   
            size = df.format((double) fileLength / 1024) + "KB";
        } else if (fileLength < 1073741824) {
   
            size = df.format((double) fileLength / 1048576) + "MB";
        } else {
   
            size = df.format((double) fileLength / 1073741824) + "GB";
        }
        return size;
    }

}


2、转码和截图处理工具类

DisposeVideoUtils.java 处理视频写入本地磁盘/服务器,将非MP4格式的格式文件进行转码写入处理,并且写入前进行视频截图

package com.sslt.utils;

import java.io.BufferedReader;
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值