SpringBoot文件上传

SpringBoot文件上传

这里只记录容易出现问题的点:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
<form id="upload" name="formname" role="form" action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="uploadFile" value="请选择文件">
    <input type="submit" value="上传">
</form>
</body>
</html>

HTML:
1、enctype="multipart/form-data"的拼写
容易误写成~~entype="multipart/form-data~~ "
2、中的属性 ID name role 是非必须的,action、method是必须的,action的值要与controller的mapping一致。method=‘post’

Controller:

@RestController
public class UploadController {
    SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");
    @PostMapping("/upload")
    public String uploadFiles(@RequestParam(value = "uploadFile") MultipartFile uploadFile, HttpServletRequest req){
        String realpath=req.getSession().getServletContext().getRealPath("/uploadFile/");
        String formDate=sd.format(new Date());
        File folder=new File(realpath+formDate);
        if(!folder.isDirectory())folder.mkdirs();

        String oldname=uploadFile.getOriginalFilename();
        String newname= UUID.randomUUID().toString()+oldname.substring(oldname.indexOf("."),oldname.length());
        try {
            uploadFile.transferTo(new File(folder,newname));
            String filePath=req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+"/uploadFile/"+formDate+"/"+newname;
            return filePath;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "上传失败";
    }
}

1、@PostMapping("/upload")与html中的action对应
2、@RequestParam(value = "uploadFile") MultipartFile uploadFile
参数前的注解不能缺失,否则参数无法正常注入
3、if(!folder.isDirectory())folder.mkdirs();这里注意用mkdirs()方法才能创建多层文件夹,如果用了mkdir()加上tomcat临时文件夹的机制,没有办法创建tomcat-docbase.*********.8080文件夹下层的/uploadFile/2020-09-18

后续如果遇到更加复杂的问题,再在这里补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值