SpringBoot 图片上传(详解篇)

2023-11-19

前言:SpringBoot在服务器内上传文件,是临时文件,在重启时候会生成另外的目录,也就意味着原来上传的图片在重启后就访问不到了。

1.图片上传


@PostMapping("/upload")
    public CommonResult insertDbMsPhoto(@RequestPart("photos") MultipartFile[] photos,
                                        @RequestParam("mid") String mid,
                                        HttpServletRequest request){
try {
            if (photos.length > 0) {
                HashMap<String , String> hashMap = null;
                for (MultipartFile photo : photos) {
                    if (!photo.isEmpty()) {
                        hashMap = new HashMap<>();
                        String originalFilename = photo.getOriginalFilename();

                        String sufixPhoto = originalFilename.split("\\.")[1];
                        //拼接图片
                        String date = new SimpleDateFormat("yyyyMM").format(System.currentTimeMillis());
                        InputStream is = null;
                        OutputStream os = null;
                        //获得路径 本地路径
                        String filePath = request.getSession().getServletContext()
                                .getRealPath("/UploadFiles/db/photo/"+date+"/");
                        File file = new File(filePath);
                        if(!file.exists()){
                            //先创建该文件的所有上级目录
                            if (file.getParentFile().mkdirs())
                            {
                                try{
                                    log.info("创建了文件目录====================");
                                    //如果不存在就创建
                                    file.mkdir();
                                }catch (Exception e){
                                    e.printStackTrace();
                                }
                            }
                        }
                        //获得图片名称
                        String photoName = date + System.currentTimeMillis()+ "." + sufixPhoto;
                        log.info("图片被上传到了:{}",filePath+photoName);

                        try {
                            is = photo.getInputStream();
                            os = new FileOutputStream(new File(filePath+photoName));
                            FileCopyUtils.copy(is, os);
                        } catch (IOException e) {
                            e.printStackTrace();
                        } finally {
                            try {
                                os.flush();
                                os.close();
                                is.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }

                        hashMap.put("ID",dbMsPhoto.getId());
                        hashMap.put("tips",dbMsPhoto.getTips());
                        hashMap.put("crtdt",dbMsPhoto.getCrtdt()+"");
                        hashMap.put("location",dbMsPhoto.getLocation());
                        hashMap.put("path",dbMsPhoto.getPath()+dbMsPhoto.getFname());
                        photoMap.add(hashMap);
                    }
                }
                //照片上传成功后返回照片信息到页面,用于更新页面显示的照片信息,便于删除是获取相关信息
            }
        }catch (Exception e){
            e.printStackTrace();
            return new CommonResult(StatusCode.SAVEFAIELD);
        }
        return new CommonResult(StatusCode.SAVESUCCESS);
     }
  • 这里是一段比较基本的图片上传代码了,当我们上传完图片之后发现打印的路径
    在这里插入图片描述

  • 路径为:C:\Users\user\AppData\Local\Temp\tomcat-docbase.8401.4328720503329668856\

我们顺着路径去查看这样的文件:

在这里插入图片描述

有大量的这种生成的tmp文件,当然图片也会被相应的保存在其中的某个文件路径下

2.上传完图片如何获取?

通过: http://localhost:8401/ + 拼接上自己的绝对路径(就是在上面获取的路径)+ 图片名即可以获取

在这里插入图片描述

  • 顺着返回的路径访问图片:

在这里插入图片描述
正常获取到

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot 图片上传(详解篇) 的相关文章

随机推荐

  • Matlab实现PID控制仿真(附上30个完整仿真源码+数据)

    本文介绍了如何使用Matlab实现PID控制器的仿真 首先 我们将简要介绍PID控制器的原理和控制算法 然后 我们将使用Matlab编写一个简单的PID控制器 并使用仿真环境来验证其性能 最后 我们将通过调整PID控制器的参数来优化控制系统
  • LVGL笔记7--lv_label标签控件

    LVGL笔记7 lv label标签控件 lv label标签控件是LVGL中使用最频繁的控件 主要是用来显示文本信息的 可在程序运行中动态修改文本内容 支持换行显示 图标字体 部分文本重绘色 长文本显示 6种显示模式等功能 lv labe
  • 八段数码管动态显示(输入数据为BCD编码)

    八段数码管动态显示 输入数据为BCD编码 一 数码管概述 图1 八段共阴数码管内部等效原理图 图2 八段共阳数码管内部等效原理图 上面两图分别是对应八段共阴 共阳的数码管内部等效图 共阴是将八个LED数码管的阴极连接在一起接低 阳极segm
  • Docker系列01—容器的发展历程---Docker的生态圈

    Docker 和容器技术的发展可谓是日新月异 本文试图以全局的视角来梳理一下 docker 目前的生态圈 既然是概览 所以不会涉及具体的技术细节 Docker 自从发布以来发生了很多的变化 并且有些方面的变化还非常大 对于技术爱好者来说 我
  • 【模电】0017 开关电源的原理及分析

    开关电源一般简称为DCDC 比我们前两节分析的线性电源复杂一些 它与线性电源最大的不同在于其调整管的工作状态 开关电源中的调整管工作在开关状态 即只工作在饱和区和截止区 1 典型开关电源的原理 一个典型的降压型开关电源原理如下图 首先 我们
  • 前端代理配置

    dev env require dev env port process env PORT 8080 autoOpenBrowser true assetsSubDirectory static assetsPublicPath proxy
  • 海量影像图元合并可以考虑用openmp

    影像合并图元耗时较长 又是重复的功能 可以考虑并行openmp
  • Linux测试比较语句

    测试和比较语句用于if或脚本命令中 if condition then commands else if conditon then commands fi 或 condition command 如果condition为真则执行comma
  • [ 数据结构-C语言 ] 二叉树--初阶 大总结~~

    今天要和大家一起步入一个新的数据结构 二叉树 在学习了解二叉树之前我们先来了解什么是树 以下是本篇的主要内容及目录 目录 1 树的概念及其结构 1 1树的概念 1 2树的相关概念 重点 1 3树的表示 2 二叉树概念及结构 2 1概念 2
  • 优化算法 - BGD、MBGD、SGD - 梯度下降

    优化算法 BGD MBGD SGD 梯度下降 BGD SGD MBGD BGD BGD Batch Gradient Descent 批量梯度下降 损失函数 L X
  • 管道-阻塞与非阻塞

    非阻塞的管道和FIFO 管道和FIFO都可以设置非阻塞 它们两者都可以在打开之后通过fcntl函数设置O NONBLOCK标志来enable 一般而言 我们都是先使用F GETFL来获取当前文件状态标志 将它与O NONBLOCK按位或之后
  • javatServlet中的cookie设置

    cookie 服务器将一些信息存储在浏览器 本地 当用户再次打开网页时 会自动填充该信息 当浏览器再次发送请求时 会将存储的信息通过请求头的方式发送给服务器端 不需要用户每次都填充某些内容 cookie中理论上来讲 最大存储4KB内容 co
  • 数学界的扫地僧们(转)

    转载连接 http www newsmth net nForum article WorkLife 752660 前两天跟一个老同学聊近年来数学上的重大发现 结果作为科普人的我说着说着就发现 数学史原来就是一部八卦史 这个圈子奇葩辈出 怪事
  • C中violatile的用法

    1 violate影响编译器结果的输出 violate变量随时可能发生变化 与violate有关的运算不要进行编译优化 以免出错 例如 volatile int i 10 int j i int k i violate告诉编译器变量i是随时
  • 对接微信支付(二)统一下单API

    原创文章 对接微信支付 二 统一下单API 编程屋 大家可以先想一下 大家平时在PC端发起的支付都需要什么 是不是你选好商品之后 点击支付 然后PC端弹出来一个二维码 你扫码付款 付款完成之后就OK了 当然这只是针对我们用户来说的 对于我们
  • 什么是数字孪生技术?

    数字孪生是实体对象的虚拟模型 它跨越对象的生命周期 并使用从对象上的传感器发送的实时数据来模拟行为并监控操作 数字孪生可以复制许多现实世界中的物品 从工厂中的单台设备到完整的装置 例如风力涡轮机 甚至整个城市 数字孪生技术使您能够监督资产的
  • 毕业设计-基于机器视觉深度学习船只船舶检测

    目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度
  • Idea设置maven依赖自动导入

    maven自动导入 setting gt Build gt Build Tools gt Any changes
  • mmocr环境配置

    win10 显卡3070 创建名为mmocr的环境 conda create n mmocr python 3 7 y 激活mmocr conda activate mmocr 失败了 安装完事竟然是cpu版本 没找到原因 本人3070显卡
  • SpringBoot 图片上传(详解篇)

    前言 SpringBoot在服务器内上传文件 是临时文件 在重启时候会生成另外的目录 也就意味着原来上传的图片在重启后就访问不到了 1 图片上传 PostMapping upload public CommonResult insertDb