spring boot 对于MultipartFile的视频文件上传(1)

这两天做一个小项目,负责了文件上传模块,后端使用的是spring boot,前端vue,我将文件保存在磁盘上

首先,在配置文件里对于文件上传的大小进行配置,因为spring 的默认配置文件上传大小差不多好象是1MB(这个只有模糊印象了,反正特别小),大小可以自己定义

spring.servlet.multipart.max-file-size=1024MB
spring.servlet.multipart.max-request-size=1024MB

然后你也可以将上传后保存的地址写道配置文件里,本人是新建了一个cofig类,规定了一些上传大小

public class UploadConfig {
    //上传电影地址 windows系统
    public static final String WINDOWS_UPLOAD_PATH = "D:/YouDaStorage/";
    //上传电影地址 linux系统
    public static final String LINUX_UPLOAD_PATH = "/home/deploy/YouDaStorage";

    //上传电影封面指定大小  30MB
    public static final long MAX_PHOTO_SIZE = 30 * 1024 * 1024;
    //上传电影资源指定大小  5GB
    public static final Long MAX_FILM_SIZE = 5 * 1024 * 1024 * 1024L;

    //视频文件后缀为avi,mp4,mov,wmv,flv,MPEG
    public static String getFilmSuffix(String fileName) {
        if (org.apache.commons.lang.StringUtils.isBlank(fileName)) {
            return null;
        }
        if (fileName.endsWith(".avi")) {
            return ".avi";
        }
        if (fileName.endsWith(".mp4")) {
            return ".mp4";
        }
        if (fileName.endsWith(".mov")) {
            return ".mov";
        }
        if (fileName.endsWith(".wmv")) {
            return ".wmv";
        }
        if (fileName.endsWith(".flv")) {
            return ".flv";
        }
        if (fileName.endsWith(".MPEG")) {
            return ".MPEG";
        }
        return null;
    }

    //照片后缀为jpg,png,jpeg
    public static String getPhotoSuffix(String fileName) {
        if (StringUtils.isBlank(fileName)) {
            return null;
        }
        if (fileName.endsWith(".jpg")) {
            return ".jpg";
        }
        if (fileName.endsWith(".png")) {
            return ".png";
        }
        if (fileName.endsWith(".jpeg")) {
            return ".jpeg";
        }
        return null;
    }
}

接着就是service层了,我这个是在Windows系统下可以保存成功,但是mac系统下会报错,根据业务需求返回url或者其它的信息

public String uploadFilm(MultipartFile file) {
        checkFilmFile(file);
        //UUID防止文件重复,并去除多余符号
        String fileName = UUID.randomUUID().toString() + file.getOriginalFilename();
        fileName = fileName.replaceAll("-", "");
        // 存储路径,windows
        String path = WINDOWS_UPLOAD_PATH + fileName;
        //创建文件路径
        File dest = new File(path);
        //判断文件是否存在
        if (dest.exists()) {
            return null;
        }
        //判断文件父目录是否存在
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdir();
        }
        try {
            //上传文件
            file.transferTo(dest);//保存文件
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        //电影保存的路径即重新生成名称
        return fileName;
    }

其中checkFilm的检验函数


    //判断视频大小以及格式
    private void checkFilmFile(MultipartFile multipartFile) {
        //判断文件大小的标志位
        int flagSize = 0;
        if (multipartFile.isEmpty()) {
            throw new ServiceException("请选择文件上传");
        }
        //判断格式
        String suffix = UploadConfig.getFilmSuffix(multipartFile.getOriginalFilename());
        if (StringUtils.isEmpty(suffix)) {
            throw new ServiceException("上传格式错误,请选择后缀为avi,mp4,mov的视频文件");
        }
        try {
            InputStream inputStream = multipartFile.getInputStream();
            if (inputStream.available() > UploadConfig.MAX_FILM_SIZE) {
                flagSize = 1;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (flagSize == 1) {
            throw new ServiceException("文件大小不能超过5GB");
        }
    }

然后直接在controller层调用就行。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值