springboot关于文件上传

上传文件大家首先想到的就是Apache Commons FileUpload,这个库使用非常广泛。
Spring Boot3 版本中已经不能使用了。代替他的是 Spring Boot 中自己的文件上传实现。Spring Boot 上传文件现在变得非常简单。提供了封装好的处理上传文件的接口 MultipartResolver,用于解析上传文件的请求,他的内部实现类 StandardServletMultipartResolver。之前常用的CommonsMultipartResolver 不可用了。CommonsMultipartResolver 是使用Apache Commons FileUpload 库时的处理类StandardServletMultipartResolver 内部封装了读取 POST 其中体的请求数据,也就是文件内容。我们现在只需要在 Controllcr 的方法加入形参@RequestParam MultipartFilc。 MultipartFile 表示上传的文件,提供了方便的方法保存文件到磁盘。

MultipartResolver

@Controller
public class UpLoadFileController {
    @PostMapping("/uploadFile")
    public String upLoadFile(@RequestParam("upfile") MultipartFile multipartFile){
        System.out.println("文件开始上传");
        Map<String, Object> info = new HashMap<>();
        try {
        //判断文件是否为空
            if(!multipartFile.isEmpty()){

                //不为空
                info.put("文件的参数名称", multipartFile.getName());
                info.put("内容类型", multipartFile.getContentType());

                var ext = "unknown";
                //原始文件名
                var fileName = multipartFile.getOriginalFilename();//a.jpg
                if(fileName.indexOf(".") > 0){
                    ext = fileName.substring(fileName.indexOf(".") + 1);
                }

                //新文件名
                var newFileName = UUID.randomUUID().toString()+ "." + ext;
                var path = "E://file//" + newFileName;

                //保存文件
                multipartFile.transferTo(new File(path));

                info.put("文件名称", newFileName);
                System.out.println(info);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        //重定向
        return "redirect:/index.html";
    }
}

在这里插入图片描述

Servlet规范

@Controller
public class UploadAction {
    @PostMapping("/files")
    public String upload(HttpServletRequest request){
        try {
            for(Part part: request.getParts()){
                String fileName = extractFileName(part);
                //将文件写到服务器的目录
                part.write(fileName);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return "redirect:/index.html";
    }

    private String extractFileName(Part part){
        String contentDisp = part.getHeader("content-disposition");
        String[] items = contentDisp.split(";");
        System.out.println(contentDisp);
        for(String s: items){
            if(s.trim().startsWith("filename")){
                return s.substring(s.indexOf("=") + 2, s.length() - 1);
            }
        }
        return "";
    }
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值