当前位置:   article > 正文

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

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/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

(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配制文件重载完成!");
		
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

(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;
    }

    
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89

响应码工具类 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;             // 过期状态
	
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

(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;
    }

}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141

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

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

package com.sslt.utils;

import java.io.BufferedReader;
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/267859
推荐阅读
相关标签
  

闽ICP备14008679号