Vue 实现文件真实后缀名检测
前言在公司项目中,上传应用 Logo 时,前端限制只能上传 PNG 格式的文件。然而,有些用户可能会通过手动修改文件后缀名的方式上传非 PNG 格式的文件(如 JPG)。这会导致客户端在打包时失败。因此,我们需要一种方法来验证文件的真实扩展名。
解决方案我们可以通过读取文件的前几个字节来获取文件的真实扩展名。以下是实现步骤:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849/** * 获取文件的真实扩展名 * @param {File} file - 要检查的文件对象 * @returns {Promise<string>} 返回文件扩展名的Promise */export const getRealFileExtension = (file: File): Promise<string> => { return new Promise((resolve, reject) =& ...
线上 Nginx work_connections 连接数超了
问题现象最近收到告警通知,部分接口出现 Nginx 500 错误。查看 Nginx 错误日志发现:
12025/04/17 10:40:20 [alert] 2403#2403: *5114106677 9216 worker_connections are not enough while connecting to upstream, client: 180.115.116.154, server: xx.xx.cn, request: "POST /report/launch HTTP/2.0", upstream: "http://172.18.20.232:9601/report/launch", host: "xx.xx.cn"
原因分析Nginx 核心参数说明Nginx 的两个关键性能参数:
worker_processes:Nginx 工作进程数量
通常设置为 CPU 核心数
建议不超过 8 个,避免系统不稳定
worker_connections:每个工作进程的最大并发连接数
直接影响 Nginx ...
SpringBoot项目统一响应设计与全局异常处理实践
SpringBoot项目统一响应设计与全局异常处理实践前言在Spring Boot项目开发中,统一的响应格式和全局异常处理机制是构建健壮API的基础。本文将详细介绍如何设计并实现一套完整的统一响应结构和全局异常处理机制,以提高API的可读性、一致性和可维护性。
设计目标
统一响应格式,确保所有API返回结构一致
统一状态码定义,便于前端处理不同情况
全局异常处理,优雅地捕获并处理各类异常
自动响应包装,减少重复代码
统一响应结构1. 状态码枚举(ApiCode)首先,我们需要定义统一的状态码枚举,用于标识API响应的状态:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778package com.xingcy.app.common;import lombok.Getter;/** * API 状态码枚举类 * * @author xingcy ...
Mac 安装 RabbitMQ 延迟队列插件
前言RabbitMQ 是一个流行的开源消息代理软件,但其原生功能并不支持延迟队列。通过安装 rabbitmq_delayed_message_exchange 插件,我们可以实现消息的延迟发送功能。本文将介绍如何在 Mac 系统上安装并配置此插件。
环境说明本教程基于通过 Homebrew 安装的 RabbitMQ。如果尚未安装 Homebrew,请先完成安装。
第一步:查看 RabbitMQ 版本首先需要确认当前安装的 RabbitMQ 版本,因为插件版本必须与 RabbitMQ 主版本匹配。
1brew info rabbitmq
输出示例:
12345678910111213141516171819202122==> rabbitmq: stable 4.0.7 (bottled)Messaging and streaming brokerhttps://www.rabbitmq.comInstalled/opt/homebrew/Cellar/rabbitmq/4.0.7 (1,526 files, 23.4MB) * Poured from bottle using ...
SpringBoot 3.4.3 整合 RabbitMQ
SpringBoot 3.4.3 整合 RabbitMQ 4.0.7 实战指南1. 概述消息队列是分布式系统中不可或缺的组件,用于解耦、异步处理、削峰填谷等场景。RabbitMQ 作为一种高性能、可靠的消息队列中间件,广泛应用于企业生产环境。本文将详细介绍如何在 SpringBoot 3.4.3 项目中整合 RabbitMQ 4.0.7,并实现三种交换机类型(Direct、Fanout、Topic)的完整示例。
2. RabbitMQ 核心概念在深入实现之前,先简单回顾 RabbitMQ 的几个核心概念:
Producer:生产者,发送消息的应用程序
Consumer:消费者,接收和处理消息的应用程序
Queue:队列,存储消息的缓冲区
Exchange:交换机,接收生产者发送的消息,并根据路由规则将消息路由到一个或多个队列
Binding:绑定,Exchange 和 Queue 之间的关联关系
Routing Key:路由键,Exchange 根据路由键将消息路由到队列
RabbitMQ 支持多种类型的交换机,本文将重点介绍三种:
Direct Exchange:直接交换机,根 ...
RabbitMQ 4.x 入门指南:从小白到消息队列实践者
RabbitMQ入门指南什么是RabbitMQ?RabbitMQ是一个开源的消息代理和队列服务器,它实现了高级消息队列协议(AMQP),用于在分布式系统中存储和转发消息。简单来说,它就像一个高效的邮局,负责接收、存储和分发应用程序之间的消息。
生活场景类比:当你在电商网站下单后,系统需要做很多事情——减库存、发邮件通知、生成订单、更新用户积分等等。如果这些操作都在用户点击”提交订单”时同步执行,用户可能需要等待很久。而使用RabbitMQ,主程序只需要发送一条”用户下单了”的消息,其他服务可以异步处理各自的任务,大大提高了系统响应速度。
RabbitMQ的优缺点优点
可靠性:支持消息持久化、传输确认和发布确认,确保消息不丢失
灵活的路由:通过Exchange实现多种消息路由方式
扩展性:支持集群部署,轻松应对高并发
多语言支持:几乎支持所有主流编程语言
管理界面:提供友好的Web管理界面
缺点
学习曲线:概念较多,初学者需要时间理解
性能:相比Kafka等系统,在超高吞吐量场景下表现稍弱
配置复杂:高级功能需要较多配置
RabbitMQ核心概念基础组件
Producer(生产者 ...
ElasticSearch ClickHouse Doris 三个数据库的区别
ElasticSearch、ClickHouse、Doris三大数据库深度对比
Elasticsearch、ClickHouse、Doris是三种不同定位的数据库,分别针对特定场景优化。本文对三者进行深度对比分析,帮助您根据业务需求选择最合适的解决方案。
基础架构对比
数据库
定位
存储模型
架构特点
适用场景
Elasticsearch
分布式搜索和分析引擎
文档型(JSON)
分片+倒排索引
全文检索、日志分析
ClickHouse
列式OLAP数据库
列式存储
向量化执行引擎
海量数据高速分析
Apache Doris
MPP架构实时数仓
列式存储
兼容MySQL协议
企业实时报表、多表关联
1. Elasticsearch详解核心优势
全文检索
复杂条件过滤
实时分析(非结构化数据)
典型应用场景
日志分析:ELK Stack生态(Elasticsearch + Logstash + Kibana)
全文搜索:电商平台商品搜索、内容网站检索
高维数据聚合:用户行为分析、地理位置服务
优点
强大的全文检索能力(支持模糊匹配、高亮显示等高级搜索功能)
优 ...
记一次 OpenVPN 配置解决 RDS 安全问题
记一次 OpenVPN 配置解决 RDS 安全问题1. 问题背景出于某些原因,线上 RDS 数据库的访问凭证(用户名密码)泄露到了公司内部。这导致了几个潜在的安全隐患:
公网访问风险:公司网络环境下,由于 RDS 公网地址的 IP 白名单包含了公司出口 IP,无权限的同事获取公网 RDS 地址后可以直接连接线上数据库
VPN 访问风险:连接公司内网 VPN 后,可以通过 RDS 内网地址连接到数据库
跳板机风险:测试服务器可以作为跳板,通过内网 RDS 地址连接线上库
本文记录了如何通过配置来逐一解决这些问题,确保只有授权人员可以访问线上数据库。
2. 解决方案2.1 剔除 RDS 公网访问白名单问题:公司网络环境下可以通过公网 RDS 地址访问线上数据库
解决方法:
在阿里云 RDS 控制台的安全设置中,将公司的外网出口 IP 从白名单中移除,这样公司网络环境下就无法通过公网地址连接数据库了。
2.2 阻断 VPN 连接内网 RDS 的通道问题:连接公司 VPN 后可通过内网地址访问 RDS
当前配置:OpenVPN 服务端配置文件中的路由配置如下:
12# 该配置使整个网段的流 ...
SpringBoot 3.4.3 引入 Nacos
安装 Nacos查看官网手册
SpringBoot 引入 Nacos1. 添加依赖在 pom.xml 中添加以下依赖(兼容 Spring Boot 3.4.3):
123456789101112131415161718192021<dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2023.0.1.0</version> <type>pom</type> <scope>import</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba.c ...
AI 大模型的 Temperature 参数到底是干嘛用的,该怎么设置
AI 大模型的 Temperature 参数是用来控制模型生成输出时的随机性和创造性的一个关键指标。具体来说,它调整的是生成结果的概率分布平滑度。
工作原理
模型生成文本时,每个可能的词都有一个预测概率(由软最大值归一化生成)。
Temperature 参数用于控制这个概率分布的尖锐程度或平滑程度:
低 Temperature(趋近 0):
让分布更尖锐,模型会倾向于选择概率最高的词。
结果更加确定性,输出更保守。
高 Temperature(>1):
让分布更平滑,模型有更高的几率选择低概率的词。
结果更加随机,输出更具创造性。
数学上,Temperature 会作用在预测概率上:
其中 T 是 Temperature 参数。
当 𝑇 → 0:会使最高概率的词占主导,结果变得更确定。
以下是关于其他AI大模型文档中关于各种请求参数的介绍
Moonshot AI
DeepSeek API 文档