SpringBoot 上传图片-指定目录按照日期存储

news2024/11/29 0:42:05

SpringBoot 上传图片-指定目录按照日期存储

1. 在配置文件中指定文件保存根目录

我用的yaml,用properties也行

file-save-path: D:/upload/

2. 文件上传接口

package com.admin.controller.wechat;

import cn.hutool.core.lang.UUID;
import com.redic.base.Result;
import com.redic.utils.UploadImg;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

@RestController
@RequestMapping("/weChat/img")
public class ImgController {
    /**
     * 时间格式化
     */
    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd/");

    /**
     * 图片保存路径,自动从yml文件中获取数据
     *   示例
     */
    @Value("${file-save-path}")
    private String fileSavePath;
    @Value("${server.servlet.context-path}")
    private String contextPath;


    @PostMapping("/uploadImage")
    public Result uploadImg(MultipartFile file, HttpServletRequest request) {
        //1.后半段目录: 
        String directory = simpleDateFormat.format(new Date());
        /**
         *  2.文件保存目录  
         *  如果目录不存在,则创建
         */
        File dir = new File(fileSavePath + directory);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        //3.给文件重新设置一个名字
        //后缀
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        String newFileName= UUID.randomUUID().toString().replaceAll("-", "")+suffix;
        //4.创建这个新文件
        File newFile = new File(fileSavePath + directory + newFileName);
        //5.复制操作
        try {
            file.transferTo(newFile);
            String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() +contextPath+"/upload/" + directory + newFileName;
            return Result.success("图片上传成功",url);
        } catch (IOException e) {
            return Result.success("图片上传失败");
        }
    }

}

3. 新增配置类对静态资源处理

addResourceHandlers中对请求路径为/upload/**的请求替换为"file:"+fileSavePath

例如:

请求127.0.0.1/upload/1.png就会修改为file:D:/upload/1.png

package com.admin.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @author zr
 * @date 2023/5/23 9:28
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {
    /**
     * 图片保存路径,自动从yml文件中获取数据
     */
    @Value("${file-save-path}")
    private String fileSavePath;

    /**
     * 静态资源处理
     **/
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry
                .addResourceHandler("/upload/**")
                .addResourceLocations("file:"+fileSavePath);
    }
}

4. 上传测试

image-20230527175752575

此时将我们上传的文件存放在我们配置的根目录及对应日期目录下

image-20230527175815283

5. 访问测试

成功!

image-20230527175853759

6. 注意事项

image-20230527180210084

7. 上传接口返回url报404排查

最简单的方法就是点击下图所指的位置

image-20230527180317162

浏览器的打开的路径才是项目的根路径,不然返回的url会404找不到

image-20230527180411859

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMVC 程序开发

✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录 什么是 Spring MVCMVC 定义 怎么学 Spring MVCSpring MVC 创建和连接创建 Spring MVC 项目RequestMapping 注解介绍PostMappi…

二叉搜索树的实现(C语言)

目录 前言: 一:准备工作 (1)需要的头文件 (2)树节点结构体描述 (3)初始化 二:指针 三:插入新节点(建树) (1)生成一个新节点 (2)找插入位置 四:查找和遍历 (1)查找 (2)遍历 五:删除节点 六&…

mysql 主从同步

① 修改 master 配置文件② 新建同步账号③ 创建数据库④ 修改 slave 配置文件⑤ 配置主从关系⑥ 检验主从结果 角色ipmaster192.168.233.100slave1192.168.233.101slave2192.168.233.102 禁用 selinux 跟 firewal l情况下: ① 修改 master 配置文件 vim /etc/my…

NEFU linux实验二

在linux中,家目录又称“home目录”、“主目录”,是用户的宿主目录,通常用来保存用户的文件,可以使用“~”来表示。一个用户登录系统,进入后所处的位置就是“/home”,即家目录;root用户的家目录为…

路径规划算法:基于鸡群优化的路径规划算法- 附代码

路径规划算法:基于鸡群优化的路径规划算法- 附代码 文章目录 路径规划算法:基于鸡群优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法鸡群…

输电线路故障诊断(利用随机森林方法实现二分类和多分类)

1.simunlike仿真系统的建立( 运行效果 :输电线路故障诊断_哔哩哔哩_bilibili) 2.在仿真系统的基础上获取数据集 分别获取单相接地故障、两相接地故障、两相间短路故障、三相接地故障、三相间短路故障和正常状态下的电流(Ia,Ib,I…

一文带你了解MySQL之optimizer trace神器的功效

前言: 对于MySQL 5.6以及之前的版本来说,查询优化器就像是一个黑盒子一样,你只能通过EXPLAIN语句查看到最后优化器决定使用的执行计划,却无法知道它为什么做这个决策。这对于一部分喜欢刨根问底的小伙伴来说简直是灾难&#xff1…

2023年5月14日蓝桥杯c++省赛中级组

选择题讲解 1.)C++中,bool类型的变量占用字节数为 ( )。 A.1B.2 C.3 D.4 答案:A 解析:(C++ 中 bool 类型与 char 类型一样,都需要1 byte。一些其他类型的占用字节数:short:2 byte。int:4 byte。long long:8 byte。double:8 byte。) 2.)以下关于C++结构体的说…

代码随想录二刷 day04 | 链表之 24两两交换链表中的节点 19删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II

24. 两两交换链表中的节点 题目链接 解题思路: 先将一些可能会改变的节点保存一下,然后再按照三个步骤就行修改 注意 要使用改变以后节点的指针(这个地方一刷的时候没注意到,稀里糊涂的过去了) 代码如下:…

【八股】计算机网络-HTTP和HTTPS的区别、HTTPS加密传输原理

计算机网络-HTTP和HTTPS的区别、HTTPS加密传输原理 一、HTTP和HTTPS的基本概念二、HTTP与HTTPS的区别三、HTTPS加密传输原理1. 什么是HTTPS1.1 https诞生的原因1.2 https加密方式1.3.http和https的区别 2. https的工作流程3. 数字证书3.1 什么是数字证书3.2 如何申请数字证书3.…

亚马逊六页纸沟通法,拒绝PPT

亚马逊六页纸沟通管理法,拒绝PPT 使用一种简洁的「结构化备忘录」 内部管理会议沟通,每次不超过六页 趣讲大白话:让沟通更有效 【趣讲信息科技178期】 **************************** 那么“6页备忘录”到底是什么呢? 1. What we d…

供应链 | 在线平台的研究与思考(一):销售渠道与模式选择

封面图来源: https://www.pexels.com/zh-cn/photo/4968391/ 编者按 当前,电商平台主要采用两种销售模式:代理和分销。商家根据自身情况选择线上或线下渠道,而电商平台会根据不同的线上商家选择适当的分销模式。本期编者精选的两…

Unity 工具 之 Azure 微软语音合成普通方式和流式获取音频数据的简单整理

Unity 工具 之 Azure 微软语音合成普通方式和流式获取音频数据的简单整理 目录 Unity 工具 之 Azure 微软语音合成普通方式和流式获取音频数据的简单整理 一、简单介绍 二、实现原理 三、注意实现 四、实现步骤 六、关键脚本 一、简单介绍 Unity 工具类,自己整…

从事黑客工作十余年,究竟如何成为一名高级的安全工程师?

目录 1. 前言 2. 经验 3. 要考虑的问题 4. 学习路线详解 第一步:计算机基础 第二步:编程能力 第三步:安全初体验 第四步:分方向 尾言 参考书籍列表 1. 前言 说实话,一直到现在,我都认为绝大多数…

STP协议

目录 STP的基本概念: 桥ID(Bridge ID): 根桥: 开销(Cost): RPC(根路径开销): Port ID: BPDU:(网桥协议…

ROS:ROS是什么

目录 一、ROS简介二、ROS可以做些什么三、ROS特征四、ROS特点4.1点对点设计4.2不依赖编程语言4.3精简与集成4.4便于测试4.5开源4.6强大的库与社区 五、ROS的发展六、ROS架构6.1OS层6.2中间层6.3应用层 七、通信机制八、计算图8.1节点(Node)8.2节点管理器…

当ChatGPT参加中国高考,把全国A卷B卷喂给它后,竟严重偏科

作者 |Python ChatGPT作为一个智能人机对话应用,在推出后迅速风靡全球。仅仅一个月的时间,其用户数量已经突破了一亿大关。人们也用ChatGPT测试了很多考试项目,例如SAT、AP、GRE等。然而,如果让ChatGPT来参加我们中国的高考&…

Jetson Orin Nano 快速安装 ROS2 Foxy详解

大家好,我是虎哥,入手一块Jeston Orin nano 8G模块,这个模块因为是英伟达未来5年左右主推的模块,所以我逐步会将之前所有的应用都在这个模块环境上做适配,本章内容,我将主要围绕安装ROS2 Foxy版本为主展开。…

探索Java面向对象编程的奇妙世界(四)

⭐ 变量的分类和作用域⭐ 包机制(package、import)⭐ 面向对象三大特征——继承⭐ 继承的作用⭐ 继承的实现⭐ instanceof 运算符⭐ 继承使用要点⭐ 方法重写 override⭐ final 关键字⭐ 继承和组合 ⭐ 变量的分类和作用域 变量有三种类型:局部变量、成员变量(也称为…

Diffusion Model 深入剖析

Diffusion Model 深入剖析 最近AI生成艺术领域非常火热,从 Midjourney 到 Stable Diffusion,不管你是绘画高手还是艺术小白,只要输入想要绘制内容的描述或者基础图像,就可以生成富有艺术感的画作! 这些风格各异、以假…