Singboot Java后端通过使用MultipartFile接受前端上传的视频并将其存放在工程中static文件夹下

Java后端通过使用MultipartFile接受前端上传的视频并将其存放在工程中static文件夹下

(好久没有更新博文了,最近在项目中遇到的一个小问题来更新下)
这里只介绍如何项目中我的问题如何解决,MultipartFile的详细使用,网上已经有许多大牛的优秀文章了,我就不班门弄斧了。
因为项目用的springboot+thymeleaf写的,所以MultipartFile照理说同样也适合其他的java项目。

引用百度知道上对MultipartFile的解释:

MultipartFile是spring的一个接口,通常我们可以在controller定义方法使用MultipartFile接收form表单提交的文件,然后将MultipartFile可以转化成一个文件。
这个接口通常是用来接收上传的文件,要将文件转换成MultipartFile文件,那么实际上应该考虑的是将File转换成CommonsMultipartFile。

一、首先贴出前端的上传视频文件html代码:

<form action="#" class="layui-form form form-horizontal" id="form-patient-add"
  th:action="@{/admin/patient/add}" enctype="multipart/form-data" method="post">	
	<div class="layui-form-item">
	   <label class="layui-form-label"><span class="x-red">*</span>模拟视频:</label>
	   <input type="file" name="file" id="file"/>
	</div>
	<button class="layui-btn" id="subbtn" type="submit">
                    提交
                </button>
 </form>

在前端代码中有三个比较重要的点:
1、form表单上的enctype=“multipart/form-data”
enctype就是encodetype(编码类型),这个是控制form中数据的编码类型的,默认是application/x-www-form-urlencoded,但是它不能用于文件上传所以我们需要将其改为enctype=“multipart/form-data”

enctype属性总共有三个:
此处引用w3school中的一张截图
在这里插入图片描述
2、method=“post”
上传文件的form中method方法必须为post
3、input中的name属性值“file”
name属性值即后端Controller层方法识别的数据名,我这里是“file”。

二、后端Controller层的代码

@PostMapping("add")
    @ResponseBody
    public AjaxResult add( @RequestParam( value="file",required=false) MultipartFile multipartFile, HttpServletRequest request) {
        //视频上传
        //获取原文件名
        String name=multipartFile.getOriginalFilename();
        //获取文件后缀
        String subffix=name.substring(name.lastIndexOf(".")+1,name.length());
		//控制格式
        if(subffix.equals("")||!subffix.equals("mp4")||!subffix.equals("mov")||!subffix.equals("avi")||!subffix.equals("wmv")||!subffix.equals("m4v")||!subffix.equals("dat")||!subffix.equals("flv")||!subffix.equals("mkv"))
        {
            return AjaxResult.error("视频格式不对");
        }
        //新的文件名以日期命名
        String fileName=new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
        //获取项目路径到webapp
        String filepath=request.getServletContext().getRealPath("/")+"files\\";
        //获取项目根路径并转到static/videos
        String path = ClassUtils.getDefaultClassLoader().getResource("").getPath()+"static/videos/";
        File file=new File(path);
        if(!file.exists())//文件夹不存在就创建
        {
            file.mkdirs();
        }
        //保存文件
        try {
            multipartFile.transferTo(new File(file+"\\"+fileName+"."+subffix));
        } catch (IOException e) {
            e.printStackTrace();
        }
        String realPath=file+"\\"+fileName+"."+subffix;
        String simulationVideo="/videos/"+fileName+"."+subffix;
        return toAjax(true);
    }

在add方法参数中
@RequestParam( value=“file”,required=false) MultipartFile multipartFile
value=“file”即接收name值为“file”的input数据,而required=false必须加上,否则会报错导致文件保存不了,具体错误这里就不贴上来了。

代码中的filepath变量和path
filepath是获取到webapp的路径,
path是获取static文件夹的路径,
这两个均可自定义,最后使用

multipartFile.transferTo(new File(file+"\\"+fileName+"."+subffix));

即可将文件流保存到指定的地方。

  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值