[文件上传工具类] MultipartFile 统一校验

目录

1. 创建上传文件的统一校验类

包含功能:

-> 1. 多文件上传校验

-> 2. 文件名字校验(特殊符号)

-> 3. 文件后缀校验

2. 使用方式

建议: 在文件上传开始的位置添加

-> 两个重载方法, 单文件 多文件都支持

-> 示例: 直接可以用, 任意位置

 3. 注意: 如果出现红色部分 删除即可, 业务代码


1. 创建上传文件的统一校验类 

包含功能:

-> 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("文件格式不支持,请更换后重试!");}
//        }}

 

2. 使用方式

建议: 在文件上传开始的位置添加

-> 两个重载方法, 单文件 多文件都支持

-> 示例: 直接可以用, 任意位置

 3. 注意: 如果出现红色部分 删除即可, 业务代码


补充: 文件上传为何要加层层校验

 文件上传过程可以被恶意用户或黑客传播恶意代码或病毒,或非法获取敏感信息。

  1. 防止文件类型欺骗:恶意用户可能会尝试更改文件扩展名或MIME类型来欺骗系统,以允许上传危险的文件。通过校验文件内容和扩展名等方式,可以避免这种情况的发生。

  2. 防止文件大小超限:限制文件大小是非常重要的,以防止用户上传过大的文件影响服务器性能或导致拒绝服务攻击。

  3. 防止文件包含恶意代码:检查上传的文件是否存在恶意代码(例如病毒、木马等),以防止恶意文件传播和安全风险。

  4. 防止文件参数篡改:对文件参数(名称、路径、大小等)进行校验以确保上传的文件参数与预期的相同,防止黑客使用文件上传功能来修改参数,攻击系统。

同时还需要进行压缩(如图片,视频等)

图片和视频压缩的目的是降低文件大小,以减少占用存储空间和传输带宽,同时还能提高加载速度。压缩后的图像和视频文件不会损失太多的质量,而且基本上不会影响观察效果。另外,压缩后的文件也更容易存储和分享,因为它们需要更少的存储空间和传输带宽。

举个列子: 视频压缩

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部