SpringBoot中文件的上传(包含视频)

一、编写接口

注:传输参数savePath可前端指定地址,也可前后端指定地址

即:该参数一定情况下可不传

代码:

    @RequestMapping(value = "/uploadVideo")
    @ResponseBody
    //Map<String,String>: map是键值对形式组成的集合,类似前端的数组但是里面是键值对形式的,前后两个string代表键和值都是字符串格式的。
//    , @RequestParam String SavePath
    //post请求传入的参数:MultipartFile file(理解为springmvc框架给我们提供的工具类,代表视频流数据),SavePath(前台传来的地址路径,也是用来后端保存在服务器哪个文件夹的地址)
    public Map<String, String> savaVideoTest(@RequestParam("file") MultipartFile file)
        //throws IllegalStateException写在方法的前面是可以抛出异常状态的,如果有错误会把错误信息发出来对应下面的try和catch
            throws IllegalStateException
    {
        //指定的存储路径(可修改)
            String SavePath = "F:\\";
        //new一个map集合出来
        Map<String, String> resultMap = new HashMap<>();
        try
        {
//            log.info("保存开始!");
            //获取文件后缀,因此此后端代码可接收一切文件,上传格式前端限定
            String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1).toLowerCase();
            // 重构文件名称
            System.out.println("文件保存路径" + SavePath);
            //UUID(全局唯一标识符)randomUUID(随机生成标识符)toString(转成字符串)replaceAll(替换字符方法,因为随机生成的里面包括了 - ,这里意思是把 - 全部换成空)
            String pikId = UUID.randomUUID().toString().replaceAll("-", "");
            //视频名字拼接:唯一标识符加上点,再加上上面的视频后缀也就是MP4之类的。就组成了现在的视频名字,比如这样:c7bbc1f9664947a287d35dd7cdc48a95.mp4
            String newVideoName = pikId + "." + fileExt;
            System.out.println("重构文件名防止上传同名文件:" + newVideoName);
            //保存视频的原始名字
            String videoNameText = file.getOriginalFilename();
            System.out.println("视频原名:" + videoNameText);
            //保存视频url路径地址
            String videoUrl = SavePath + "/" + newVideoName;
            //调用数据库接口插入数据库方法save,把视频原名,视频路径,视频的唯一标识码传进去存到数据库内
            CommunityVideo communityVideo = new CommunityVideo();
            communityVideo.setVideoNameText(videoNameText);
            communityVideo.setVideoUrl(videoUrl);
            communityVideo.setNewVideoName(newVideoName);
            communityVideoMapper.insertSelective(communityVideo);

            //判断SavePath这个路径也就是需要保存视频的文件夹是否存在
            File filepath = new File(SavePath, file.getOriginalFilename());
            if (!filepath.getParentFile().exists())
            {
                //如果不存在,就创建一个这个路径的文件夹。
                filepath.getParentFile().mkdirs();
            }
            //保存视频:把视频按照前端传来的地址保存进去,还有视频的名字用唯一标识符显示,需要其他的名字可改这
            File fileSave = new File(SavePath, newVideoName);
            //下载视频到文件夹中
            file.transferTo(fileSave);
            //构造Map将视频信息返回给前端
            //视频名称重构后的名称:这里put代表添加进map集合内,和前端的push一样。括号内是前面字符串是键,后面是值
            resultMap.put("newVideoName", newVideoName);
            //正确保存视频成功,则设置返回码为200
            resultMap.put("resCode", "200");
            //返回视频保存路径
            resultMap.put("VideoUrl", SavePath + "/" + newVideoName);
            //到这里全部保存好了,把整个map集合返给前端
//            log.info("保存成功!");
            return resultMap;

        }
        catch (Exception e)
        {
            //在命令行打印异常信息在程序中出错的位置及原因
            e.printStackTrace();
            //返回有关异常的详细描述性消息。
            e.getMessage();
            //保存视频错误则设置返回码为400
            resultMap.put("resCode", "400");
            //这时候错误了,map里面就添加了错误的状态码400并返回给前端看
            return resultMap;

        }
    }

二、运行时可能出现报错

The field XXX exceeds its maximum permitted size of 12340 bytes 

 指传输文件过大

        springboot传输默认小于1M

 

三、修改文件传输大小

在启动类中注入

    @Bean
    public MultipartConfigElement multipartConfigElement()
    {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //单个文件最大 50MB
        factory.setMaxFileSize("51200KB"); //KB,MB
        /// 设置总上传数据总大小 500MB
        factory.setMaxRequestSize("512000KB");
        return factory.createMultipartConfig();
    }

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 实现文件上传可以使用 Spring MVC 的 MultipartResolver 接口和 MultipartFile 类。 首先在 pom.xml 文件添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> ``` 接着在 Spring Boot 的配置文件添加以下配置: ```properties # 文件上传大小限制 spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB ``` 然后在 Controller 添加以下代码: ```java @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) throws IOException { if (file.isEmpty()) { // 文件为空 return "文件为空"; } // 获取文件名 String fileName = file.getOriginalFilename(); // 获取文件大小 long fileSize = file.getSize(); // 获取文件类型 String fileType = file.getContentType(); // 获取文件字节流 byte[] fileBytes = file.getBytes(); // 文件保存路径 String filePath = "D:/upload/" + fileName; // 保存文件 FileUtils.writeByteArrayToFile(new File(filePath), fileBytes); // 返回上传成功信息 return "上传成功"; } ``` 在以上代码,我们首先判断文件是否为空,然后获取文件的相关信息,包括文件名、文件大小、文件类型和文件字节流。接着将文件保存到指定的路径,并返回上传成功信息。 需要注意的是,这里使用了 FileUtils 类的 writeByteArrayToFile 方法保存文件,需要在 pom.xml 文件添加 commons-io 依赖。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值