SpringBoot用MultipartFile.transferTo传递相对路径的问题

  • 问题描述:

    打算给自己的项目添加一个上传文件保存功能,于是我使用MultipartFile.transferTo()来完成这个功能,由于我的项目要部署到服务器,所以我使用了相对路径把上传的文件保存到当前项目的工作目录下,但是报错了!(绝对路径可以正常使用,找了一下午没弄明白,第二天早上才反应过来会不会是这个方法就不支持直接使用相对路径,果然是猜想的这样!)

  • 当MultipartFile的transferTo()的参数是相对路径时,会自动拼接成一个绝对路径,但这个绝对路径并不是真实存在的,所以转存时会报错,而如果传递的时绝对路径,就不会有问题。

image-20240110121520742

  • 解决方法如下:
//修改1.写你要保存上传文件的相对路径
        File dir = new File("./src/main/resources/img/");
        if (!dir.exists()) {
            dir.mkdirs(); // 创建目录
        }
        String realPath = dir.getCanonicalPath(); // 获取真实路径
//修改2
        File dest = new File(realPath+"/"+fileName);
  • 最后完整的代码:
 @RequestMapping("/upload")
    public String upload(HttpServletRequest request, HttpServletResponse req) throws IOException {
        MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
        //前端参数名
        MultipartFile file = multiRequest.getFile("image");
        if (file.isEmpty()) {
            return "上传失败,请选择文件";
        }
        //获取到上传文件名
        String fileName = file.getOriginalFilename();
        //修改1.写你要保存上传文件的相对路径
        File dir = new File("./src/main/resources/img/");
        if (!dir.exists()) {
            dir.mkdirs(); // 创建目录
        }
        String realPath = dir.getCanonicalPath(); // 获取真实路径
//        String filePath = "./src/main/resource/img/" + fileName; // 这里填写你想要保存的路径,例如:"images/" + fileName;
        //修改2
        File dest = new File(realPath+"/"+fileName);

        try {
            file.transferTo(dest);
//            file.transferTo(dest);
            req.sendRedirect("ok.html");
            return fileName;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "上传失败!";
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/312075.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在 Windows 中使用Copilot AI

Windows Copilot 是 Windows 中的一个新功能,它可以让你与一个智能助理进行对话,获取信息,执行任务,甚至创造内容。Windows Copilot 使用了 Bing Chat 的技术,它是一个基于 OpenAI 的 GPT-4 模型的聊天机器人。 目录 …

关于树结构的数据的权限控制的算法

树结构的权限控制分两种:1、逐层加载;2、一次性加载 一、逐层加载 涉及的表结构 表名 T_PLAN 表字段 字段类型 是否必 须字段 说明 ID VARCHAR2(50) Y 主键 PARENT_ID VARCHAR2(50) Y 父项节点ID,默认根节点的父节点ID’-1’ TREEPATH VA…

vue3的福音框架arco.design

前言: 在vue2于2023年底正式宣布不在维护,vue3使用越来越频繁的时刻,我们实现项目的辅助框架也越来越多。element, iview, antd 等经典框架继续风靡一时,不过也有很多好的框架,功能也强大,比如我们今天说的…

ISO 11519-2 开环低速 CAN 网络(10K~125Kbps)

ISO 11519-2 标准的物理框图如下图 可理解为一个低速开环 CAN 总线网络;CAN 开环总线网络允许总线最大长度为 1km;最高速度为 125Kbps;这里的两根线是独立的,每根线上串联一个 2.2kΩ 的电阻;节点就是不同的设备,连接到一个开环总…

Mac上使用phpstudy+vscode配置PHP开发环境

使用的工具: 1、系统版本 2、vs code code 3、phpstudy_pro 一、下载vs code code以及必要的插件 1、vs code下载 点击vs code官网下载 选择对应的版本,一般电脑会自动识别对应的版本,点击下载,然后傻瓜式安装! 2…

万字长文 详细讲述 计算机网络层

文章目录 网络层网络层的几个重要概念网络层的两个层面 网际协议 IP虚拟互连网络IP 地址IP 地址及其表示方法IP 地址与 MAC 地址地址解析协议 ARPIP 数据报的格式 IP层转发分组过程基于终点的转发最长前缀匹配 网际控制报文协议 ICMPICMP 报文的种类ICMP 的应用举例IPv6 的基本…

Leetcode 494 目标和

题意理解: 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums [2, 1] ,可以在 2 之前添加 ,在 1 之前添…

js更新地址栏,但是不刷新页面

记录一下第一次遇到更新地址栏但是不刷新页面的需求 有时候会遇到一些需求,比如复制地址,分享给别人 希望也保留筛选条件,但是之前做的时候筛选条件存储到的状态管理工具里面了,地址栏没有,所以为了更快的实现效果&am…

如何下载“ubuntu”在win10系统?

一、下载 企业开源和 Linux |Ubuntu的

解决jenkins需要jdk11,项目需要jdk8的问题

思路:jdk8 采用解压缩模式,jdk11采用安装模式,然后在jenkins中指定jdk路径 下载解压缩jdk8 https://www.oracle.com/java/technologies/downloads/#java8 解压缩:jdk-8u391-linux-i586.tar.gz /lib/ld-linux.so.2: bad ELF inte…

Realm Management Extension领域管理扩展之颗粒保护检查

本节描述了RME引入的颗粒保护检查。颗粒保护检查使得能够在不同的物理地址空间之间动态分配内存区域。 本节将向您介绍以下功能: 颗粒保护表的结构用于颗粒保护检查的故障报告区域在物理地址空间之间的过渡正如在物理地址一节中所述,RME提供了四个物理地址空间。以下图表显示…

搭建 MyBatis 环境

目录 1.添加依赖 2.数据库连接配置 3.配置XML路径 4.下载插件MyBatisX 5.如何使用 6.示例 1.添加依赖 创建新项目时添加两个依赖: MyBatis Framewrok 和 MySQL Driver 。 如果是在已经创建好的项目中配置mybatis环境。需要先下载一个插件:EditStarters 。 然…

JavaScript复习小案例

JavaScript实现简易留言板 效果图 完整代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>留言板</title><style>body {background-color: #f4f4f4;}/* 外部容器样式设置 */.wrapper {width: 400px;heigh…

探索 TCP 与 UDP:网络通信的两门学派(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Vue3组件库 -- element plus 树形选择器组件怎样显示已有的树形菜单?

<el-tree-selectv-model"form.topmneu":data"tableData":props"{ label: title, value: id }":render-after-expand"false"style"width: 100%"check-strictly/> 添加 :props "{ lable : 字段名 , value: 字段…

Java并发之同步二:Java并发工具类

一、CountDownLatch &#xff08;1等多汇总、多等1 开关&#xff09; countdownlatch 底层原理&#xff0c;定义锁资源&#xff1a;0&#xff0c;当资源为0才叫拿到锁&#xff0c;所以countdownlatch也叫做倒数器&#xff0c;拿锁的时候判断是不是0&#xff0c;不是就park&…

NumPy 数据操作实用指南:从基础到高效(下)

文章接上篇&#xff1a; In [53]: from PIL import Image In [60]: dog Image.open(./dog.jpg) dog . . . In [61]: dog_datanp.array(dog) # 图片数据是ndarray # 彩色照片三维&#xff1a;高度&#xff0c;宽度&#xff0c;像素&#xff08;表示不同颜色&#xff09;&…

雪花代码-html版

雪花代码 动画效果 代码 <!DOCTYPE html><html><head><style>body {background-color: #000000;}.snowflake {position: absolute;font-size: 10px;color: #FFFFFF;text-shadow: 1px 1px 1px #000000;user-select: none;}</style></head>…

008-关于FPGA/ZYNQ直接处理图像传感器数据输出的若干笔记(裸板采集思路)

文章目录 前言一、图像传感器厂商二、图像传感器的参数解析三、图像传感器中的全局曝光和卷帘曝光四、处理传感器图像数据流程1.研究当前图像传感器输出格式2.FPGA处理图像数据 总结 前言 最近也是未来需要考虑做的一件事情是&#xff0c;如何通过FPGA/ZYNQ去做显微镜图像观测…

大数据Doris(五十四):SQL函数之日期函数(二)

文章目录 SQL函数之日期函数(二) 一、DAYOFMONTH(DATETIME date) 二、dayofweek(DATETIME date)