栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot 文件MultipartFile上传路径问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot 文件MultipartFile上传路径问题

1、问题描述

当我们使用springboot时,都会遇到文件上传这个功能,当我们使用transferTo()进行文件转存时,又遇到一系列的问题:

先上一个代码:email和username的这两个参数不需要管,我们本次就单独来看headerImg但文件上传和photos的多文件上传问题:

    @PostMapping("/upload")
    public String upload(@RequestParam("email") String email,
                         @RequestParam("username") String username,
                         @RequestPart("headerImg") MultipartFile headerImg,
                         @RequestPart("photos") MultipartFile[] photos) throws IOException {
        log.info("上传的信息:email={},username={},headerImg={},photos={}",email,username,headerImg.getSize(),photos.length);
        String path = "./src/main/resources/cache";
        if(!headerImg.isEmpty()){
            String filename = headerImg.getOriginalFilename();

            headerImg.transferTo(new File(path+"/"+filename));
        }
        if(photos.length > 0){
            for (MultipartFile photo : photos) {
                if(!photo.isEmpty()){
                    String filename = photo.getOriginalFilename();
                    photo.transferTo(new File(path+"/"+filename));
                }
            }
        }
        return "main";
    }

我们在上传后存储过程中, 通常我们都想把它放在当前文件根目录的resources文件中(本次我打算把它放在resources下自己新建的cache文件夹存放)

这时,我们都会选择使用相对路径来确定目标位置,此时运行后会报一个错误:(若使用绝对路径就没问题)

 它说我们的路径找不到:/private/var/folders/fq/y2td_36x7cs9449xg9tdpf6m0000gn/T/tomcat.8080.12427067138093864755/work/Tomcat/localhost/ROOT/./src/main/resources/cache/id-正.png (No such file or directory)

我们发现其中多了一串其他的路径信息

这是因为transferTo()方法,会判断你传进来的是否是相对路径,如果是,则会使用他的temp路径作为本次路径的父目录,然后将我们的路径一起转换为绝对路径!

2、解决方法

1、获取相对路径的绝对路径

2、将获得的绝对路径+文件名一起传进去就可以完美解决!

示例:

    @PostMapping("/upload")
    public String upload(@RequestParam("email") String email,
                         @RequestParam("username") String username,
                         @RequestPart("headerImg") MultipartFile headerImg,
                         @RequestPart("photos") MultipartFile[] photos) throws IOException {
        log.info("上传的信息:email={},username={},headerImg={},photos={}",email,username,headerImg.getSize(),photos.length);
        String path = "./src/main/resources/cache";
        String destPath = new File(path).getAbsolutePath();
        if(!headerImg.isEmpty()){
            String filename = headerImg.getOriginalFilename();

            headerImg.transferTo(new File(destPath+"/"+filename));
        }
        if(photos.length > 0){
            for (MultipartFile photo : photos) {
                if(!photo.isEmpty()){
                    String filename = photo.getOriginalFilename();
                    photo.transferTo(new File(destPath+"/"+filename));
                }
            }
        }
        return "main";
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/764158.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号