1. 创建上传文件的统一校验类
包含功能:
-> 1. 多文件上传校验
-> 2. 文件名字校验(特殊符号)
-> 3. 文件后缀校验
2. 使用方式
建议: 在文件上传开始的位置添加
-> 两个重载方法, 单文件 多文件都支持
-> 示例: 直接可以用, 任意位置
3. 注意: 如果出现红色部分 删除即可, 业务代码
-> 1. 多文件上传校验
一般会对文件大小进行限制 超过则禁止上传
-> 2. 文件名字校验(特殊符号)
名字一般传递到后端服务后 会重新生成一个名字, 再上传到资源服务器
-> 3. 文件后缀校验
支持常用的文件格式, 视频格式 音频格式 对后缀不明确的后缀进行拦截
基础校验工具类 以及常用参数
package *;
import *;
import *;
import org.springframework.web.multipart.MultipartFile;
import java.util.Arrays;
import java.util.Locale;
/**
* @author pzy
* @version 3.1.0 大版本更新
* 文件上传校验的公共方法
* 严格校验
*/
public class UploadCheckUtils {
/**
* 文件大小 10MB(可用于图片和视频区分)
*/
private static final long FILE_SIZE = 10 * 1024 * 1024;
/**
* 只支持图片格式
*/
public static final String[] YES_IMAGE_SUPPORT = {".jpg", ".jpeg", ".png"};
/**
* 只支持视频格式
*/
public static final String[] YES_VIDEO_SUPPORT = {".mp4", ".avi", ".mp3"};
/**
* 只支持音频格式
*/
public static final String[] YES_AUDIO_SUPPORT = {".mp3"};
/**
* 只支持文件格式
*/
public static final String[] YES_FILE_SUPPORT = {".xlsx", ".xls", ".doc", ".docx", ".txt", ".csv"};
/**
* 全部文件(普通文件,图片, 视频,音频)后缀 支持的类型
*/
private static final String[] FILE_SUFFIX_SUPPORT = {".xlsx", ".xls", ".doc", ".docx", ".txt", ".csv",
".jpg", ".jpeg", ".png", ".mp4", ".avi", ".mp3"};
/**
* 文件名字 需要排除的字符
* 废弃: "(", ")","",".", "——", "_","-"
*/
private static final String[] FILE_NAME_EXCLUDE = {
"`", "!", "@", "#", "$", "%", "^", "&", "*" , "=", "+",
"~", "·", "!", "¥", "……", "(", ")",
"?", ",", "<", ">", ":", ";", "[", "]", "{", "}", "/", "\\", "|",
"?", ",", "。", "《", "》", ":", ";", "【", "】", "、"
};
}
多文件上传方法
没有文件报错
/**
* 多文件上传
*
* @param multipartFile
*/
public static void uploadVerify(MultipartFile[] multipartFile) {
/*校验1: 没有文件时,报错提示*/
if (multipartFile == null) {
throw new ThirdServiceException(ResponseEnum.T160000, "上传文件不能为空");
}
/*校验2: 上传文件的长度小于等于1 就一个直接校验*/
if (multipartFile.length <= 1) {
uploadVerify(multipartFile[0]);
return;
}
/*校验3: 多个文件直接校验*/
for (MultipartFile uploadFile : multipartFile) {
uploadVerify(uploadFile);
}
}
统一封装校验方法
格式 后缀 名称 大小都会进行限制
// // 校验文件大小(统一校验),配置文件中添加
// long size = multipartFile.getSize();
// if(size > FILE_SIZE){
// throw new RuntimeException("文件大小不能超过10MB!");
// }
/**
* 上传文件校验大小、名字、后缀
*
* @param multipartFile multipartFile
*/
public static void uploadVerify(MultipartFile multipartFile) {
// 校验文件是否为空
if (multipartFile == null) {
throw new RuntimeException("文件不能为空!");
}
// 校验文件名字
String originalFilename = multipartFile.getOriginalFilename();
if (originalFilename == null) {
throw new RuntimeException("文件名字不能为空!");
}
for (String realKey : FILE_NAME_EXCLUDE) {
if (originalFilename.contains(realKey)) {
throw new RuntimeException("文件名字不允许出现' " + realKey + " ' 关键字!");
}
}
// 校验文件后缀
if (!originalFilename.contains(".")) {
throw new RuntimeException("文件不能没有后缀!");
}
String suffix = originalFilename.substring(originalFilename.lastIndexOf('.'));
// for (String realFormat : FILE_SUFFIX_SUPPORT) {
/*校验: 文件格式是否符合要求*/
if (!Arrays.asList(FILE_SUFFIX_SUPPORT).contains(suffix.toLowerCase(Locale.ROOT))) {
//throw new RuntimeException("文件格式' " + realFormat + " '不支持,请更换后重试!");
throw new RuntimeException("文件格式不支持,请更换后重试!");
}
// }
}
建议: 在文件上传开始的位置添加
防止文件类型欺骗:恶意用户可能会尝试更改文件扩展名或MIME类型来欺骗系统,以允许上传危险的文件。通过校验文件内容和扩展名等方式,可以避免这种情况的发生。
防止文件大小超限:限制文件大小是非常重要的,以防止用户上传过大的文件影响服务器性能或导致拒绝服务攻击。
防止文件包含恶意代码:检查上传的文件是否存在恶意代码(例如病毒、木马等),以防止恶意文件传播和安全风险。
防止文件参数篡改:对文件参数(名称、路径、大小等)进行校验以确保上传的文件参数与预期的相同,防止黑客使用文件上传功能来修改参数,攻击系统。
图片和视频压缩的目的是降低文件大小,以减少占用存储空间和传输带宽,同时还能提高加载速度。压缩后的图像和视频文件不会损失太多的质量,而且基本上不会影响观察效果。另外,压缩后的文件也更容易存储和分享,因为它们需要更少的存储空间和传输带宽。
import java.io.File;
import java.io.IOException;
import it.sauronsoftware.jave.*;
public class VideoCompressionDemo {
public static void main(String[] args) {
File source = new File("source.mp4");
File target = new File("target.mp4");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame");
audio.setBitRate(new Integer(64000));
audio.setChannels(new Integer(1));
audio.setSamplingRate(new Integer(22050));
VideoAttributes video = new VideoAttributes();
video.setCodec("mpeg4");
video.setX(new Integer(640));
video.setY(new Integer(480));
video.setBitRate(new Integer(800000));
video.setFrameRate(new Integer(15));
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("mp4");
attrs.setAudioAttributes(audio);
attrs.setVideoAttributes(video);
Encoder encoder = new Encoder();
try {
encoder.encode(new MultimediaObject(source), target, attrs);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InputFormatException e) {
e.printStackTrace();
} catch (EncoderException e) {
e.printStackTrace();
}
}
}