若依 ruoyi-vue 接口挂载获取Resources静态资源文件权限校验

news2024/11/17 12:50:21

解决小程序图片打包过大,放置后端,不引用ngnix、minio等组件,还能进行权限校验

在这里插入图片描述

package com.huida.web.controller.common.app;

import com.huida.common.core.controller.BaseController;
import com.huida.common.utils.file.FileUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@RestController
@RequiredArgsConstructor
@RequestMapping("/static")
public class StaticResourcesController extends BaseController {

    @Autowired
    private ResourceLoader resourceLoader;

    @GetMapping("/img/train/{fileName}")
    public void getImgTrain(@PathVariable String fileName, HttpServletResponse response) throws IOException {
        Resource resource = resourceLoader.getResource("classpath:static/img/train/" + fileName);
        if (resource.exists()) {
            response.setContentType(FileUtils.getContentType(resource.getFilename()));
            FileUtils.writeBytes(resource.getURI().getPath(), response.getOutputStream());
        }
    }

    @GetMapping("/img/{fileName}")
    public void getImg(@PathVariable String fileName, HttpServletResponse response) throws IOException {
        Resource resource = resourceLoader.getResource("classpath:static/img/" + fileName);
        if (resource.exists()) {
            response.setContentType(FileUtils.getContentType(resource.getFilename()));
            FileUtils.writeBytes(resource.getURI().getPath(), response.getOutputStream());
        }
    }

}

  /**
     * 根据文件名,设置HttpServletResponse的ContentType
     *
     * @param fileName 文件名
     * @return 结果
     * @author weimingzhong
     * @date 2024/4/3 9:50
     */
    public static String getContentType(String fileName) {
        String fileExtension = getFileExtension(fileName);
        switch (fileExtension) {
            case "png":
                return MediaType.IMAGE_PNG_VALUE;
            case "jpg":
            case "jpeg":
                return MediaType.IMAGE_JPEG_VALUE;
            case "gif":
                return MediaType.IMAGE_GIF_VALUE;
            case "pdf":
                return MediaType.APPLICATION_PDF_VALUE;
            // Add more cases for other file types if needed
            default:
                return MediaType.APPLICATION_OCTET_STREAM_VALUE; // Default to octet-stream
        }
    }

    private static String getFileExtension(String fileName) {
        int dotIndex = fileName.lastIndexOf(".");
        if (dotIndex > 0 && dotIndex < fileName.length() - 1) {
            return fileName.substring(dotIndex + 1).toLowerCase();
        } else {
            return "";
        }
    }

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

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

相关文章

c++的学习之路:14、list(1)

本章讲一下如何使用list&#xff0c;代码在文章末 目录 一、list介绍 二、增 三、删 四、查和改 五、交换 六、代码 一、list介绍 首先还是看一看官方文档的介绍如下图&#xff0c;如下方五点&#xff1a; 1. list是可以在常数范围内在任意位置进行插入和删除的序列式…

线程、多线程 、线程安全、线程通信、线程池 --java学习笔记

目录 什么是线程? 什么是进程&#xff1f; 线程的生命周期 线程的6种状态互相转换 什么是多线程? 如何在程序中创建出多条线程? 多线程的注意事项 多线程的创建方式一:继承Thread类 方式一优缺点: 代码演示&#xff1a; 多线程的创建方式二:实现Runnable接口 方…

n3.队列

1.队列 和堆栈一样&#xff0c;队列也属于受限制的线性表。 和堆栈不同的是&#xff0c;堆栈只能在一端进行出栈和入栈 &#xff08;先进后出&#xff09;&#xff0c;而队列只能在尾部插入&#xff0c;在头部删除&#xff08;先进先出&#xff09;**。 队列的操作 ——入…

8个免费视频素材网站,让你永久告别资源付费!

视频剪辑&#xff0c;需要用到各种类型的视频素材&#xff0c;一定要收藏好这8个网站&#xff0c;免费下载&#xff0c;让你永久告别资源付费&#xff0c;白嫖真爽。 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库虽然是个设计素材网站&#xff0c;但…

【编译原理】手工打造语法分析器

重点&#xff1a; 语法分析的原理递归下降算法&#xff08;Recursive Descent Parsing&#xff09;上下文无关文法&#xff08;Context-free Grammar&#xff0c;CFG&#xff09; 关键点&#xff1a; 左递归问题深度遍历求值 - 后续遍历 上一篇「词法分析器」将字符串拆分为…

idea的后端环境配置

首先&#xff0c;在你刚打开idea时红色箭头所指的是你进行配置的地方&#xff0c;接下来我把具体步骤说一下 1&#xff0c;直接点击箭头所指的地方就会出现如图界面&#xff0c;然后点击Tomcat server,使其展开点击第一个 第二步取消勾选&#xff0c;第三步选择bin的上一级然后…

14届蓝桥杯省赛 C/C++ B组 T8 整数删除(双向链表,堆)

瞬间定位一个数的左边或者右边&#xff0c;需要用到双向链表。 在过程中不断维护最小值&#xff0c;需要用到堆。 所以定义一个pair类型优先队列&#xff0c;每次取出堆顶进行删除&#xff0c;并且同时让删除元素的左右元素加上其值。 同时需要注意&#xff0c;在删除元素之后…

Spring Cloud Hoxton.SR7 Supported Boot Version: 2.3.2.RELEASE

1、地址 Spring Cloudhttps://docs.spring.io/spring-cloud/docs/Hoxton.SR7/reference/html/ 2、 截图

探索K-近邻算法(KNN):原理、实践应用与文本分类实战

第一部分&#xff1a;引言与背景 KNN算法在机器学习领域的重要性及其地位 KNN算法作为机器学习中的基石之一&#xff0c;由于其概念直观、易于理解并且不需要复杂的模型训练过程&#xff0c;被广泛应用于多种场景。它在监督学习中占据着特殊的位置&#xff0c;尤其适用于实时…

Oracle数据库启动顺序

Oracle数据库启动顺序 启动数据库 首先使用oracle用户登录Linux&#xff0c;用lsnrctl status查看监听状态 1、&#xff1a;进入sqlplus $ sqlplus /nolog SQL> 2&#xff1a;使用sysdab角色登录sqlplus SQL> conn /as sysdba 3&#xff1a;启动数据库 SQL> startup …

宝藏推荐|GitHub登顶项目之中文排行榜!开源资料,天花板级别!

&#x1f680;近年来&#xff0c;开源的力量愈发显现其重要性&#xff0c; 不仅推动了技术的发展&#xff0c;更改变了世界的面貌。 马斯克&#xff0c;这位科技界的巨星也多次强调开源的重要性&#xff0c; 他深知只有共享知识&#xff0c;才能推动人类文明的进步&#x1f…

Atcode搜索

D - Medicines on Grid (atcoder.jp) 这是一道搜索题目&#xff0c;我们使用bfs来做&#xff0c;因为本题目没让你求最小路径&#xff0c;使用dfs也可以&#xff0c;这里使用bfs。 本题目核心思想如下&#xff1a; 小高要从起点到终点&#xff0c;要求其在能量大于等于0时到…

搜索与图论——拓扑排序

有向图的拓扑排序就是图的宽度优先遍历的一个应用 有向无环图一定存在拓扑序列&#xff08;有向无环图又被称为拓扑图&#xff09;&#xff0c;有向有环图一定不存在拓扑序列。无向图没有拓扑序列。 拓扑序列&#xff1a;将一个图排成拓扑序后&#xff0c;所有的边都是从前指…

k8s1.28-helm安装kafka-Raft集群

参考文档 [Raft Kafka on k8s 部署实战操作 - 掘金 (juejin.cn)](https://juejin.cn/post/7349437605857411083?fromsearch-suggest)部署 Raft Kafka&#xff08;Kafka 3.3.1 及以上版本引入的 KRaft 模式&#xff09;在 Kubernetes (k8s) 上&#xff0c;可以简化 Kafka 集群…

分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据…

一文彻底搞懂JAVA 异常分类及处理

文章目录 1. 概念2. 异常分类3. 异常的处理方式4. throw 和 throws 的区别 1. 概念 如果某个方法不能按照正常的途径完成任务&#xff0c;就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时&#xff0c;这个方法会立刻退出同时不返回任何值。另…

蓝桥杯第十四届C++C组

三国游戏 题目描述 小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵X, Y, Z (一开始可以认为都为 0 )。游戏有 n 个可能会发生的事件&#xff0c;每个事件之间相互独立且最多只会发生一次&#xff0c;当第 i 个事件发生时会分别让 X, Y, Z 增加Ai , Bi ,Ci …

【1】初识 Python

【1】初识 Python 1、编程语言(1) 语言(2) 编程语言(3) 如何利用编程语言与计算机交流(4) 常见的编程语言(5) 语法 2、Python 简介(1) 什么是 Python(2) Python 能做什么(3) Python 的由来(4) Python的特点① 语法精简② 生态好&#xff0c;开发效率高③ Python开发初体验&…

全国计算机等级考试三级Linux应用与开发技术考试-习题汇总

https://blog.csdn.net/qq_42025798/article/details/119155696 3.第1章-计算机体系结构与操作系统-练习题-简答题 https://blog.csdn.net/qq_42025798/article/details/119186151 4.第1章-计算机体系结构与操作系统-练习题-填空题 https://blog.csdn.net/qq_42025798/article/…

风险模型总结

系统性风险 系统性风险&#xff08;Systematic Risk&#xff09;微观层面的定义由夏普&#xff08;William Sharpe&#xff09;在资本资产定价模型&#xff08;CAPM&#xff09;中首次提出&#xff0c;即资本市场中存在的不能通过分散投资予以消除的风险 模型也会带来风险 详…