SpringBoot 实现文件上传

平时我们在开发中需要上传文件到云服务器中,今天我们来用一个小demo演示如何基于SpringBoot上传文件。(这个小demo我们是上传到本地存储下)
首先我们修改一下页面代码

<form role="form" th:action="@{/upload}" method="post" enctype="multipart/form-data">
<!--此处省略-->
<div class="form-group">
	<label for="exampleInputFile">头像</label>
    <input type="file" name="headImg" id="exampleInputFile">
</div>
<div class="form-group">
	<label for="exampleInputFile">生活照</label>
	<input type="file" name="photos" multiple>
</div>

注意:我们上传照片method应该设置为"post",另外enctype属性在使用包含文件上传控件的表单时,必须使用该值(multipart/form-data)。此处的生活照,我们设计是一次性上传多张图片,因此我们应该加上multiple属性,效果如下:
在这里插入图片描述
然后,我们建立一个上传文件的类并标注为@Controller

/**
 * @Author Kk
 * @Date 2022/2/6 15:40
 * @Description 文件上传测试
 */
@Slf4j
@Controller
public class FormTestController {
    @GetMapping("/form_layouts")
    public String formLayout(){
        return "/form/form_layouts";
    }

    @PostMapping("/upload")
    public String upload(@RequestParam("email") String email,
                         @RequestParam("username") String username,
                         @RequestPart("headImg") MultipartFile headImg,
                         //因为是上传多个文件,这里我们使用数组类型
                         @RequestPart("photos") MultipartFile[] photos) throws IOException {

        log.info("上传的信息:email={},username={},headImg={},photos={}",
                email,username,headImg.getSize(),photos.length);

        //如果不为空我们便上传
        if (!headImg.isEmpty()){
            //获取文件的原始文件名
            String originalFilename = headImg.getOriginalFilename();
            //保存到服务器transferTo()方法
            headImg.transferTo(new File("D:\\Saved Pictures\\upload\\"+originalFilename));
        }

        //如果接收过来的数组不为空便遍历出每个文件,然后上传
        if (photos.length > 0){
            for (MultipartFile photo : photos){
                String originalFilename = photo.getOriginalFilename();
                photo.transferTo(new File("D:\\Saved Pictures\\upload\\"+originalFilename));
            }
        }
        return "main";
    }
}

经过测试,我们可以发现目标路径下已经存在我们刚刚上传的图片
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值