当前位置: 首页 > news >正文

关于记录一下“bug”,在做图片上传的时候出现的小问题

项目场景:

之前的话写过csdn,最近出现了一些小事情,所以耽误了好久没有更新,最近把以前的项目拿出来然后改了下环境就出现了一些问题,该项目使用SpringBoot3.5 + SpringMVC + Mybatis-Plus3.5.0,然后权限控制采用的是SpringSecurity等,因为问题主要出现在这几个部分,所以我就不介绍项目的废话了,直接开始。


问题描述

在修改项目版本的时候,旧版本很多的一些东西都被优化掉了,最近遇见的主要问题就是三个:1.版本与版本不兼容的问题;2.mysql数据库突然无法使用,密码连接失效;3.上传产品图片时出现控制台不报错但是无法显示图片的情况;如果有朋友是因为1,2出了问题的话可以去博客园,里面有解决的具体办法,我今天主要写的是图片上传失败问题。


原因分析:

原本的代码主要出现的问题是:

  1. 缺少 CSRF 防护

    • 未携带 CSRF Token,在 Spring Security 环境下会被拦截,导致请求失败(403 错误)。

    • 存在安全风险,容易受到跨站请求伪造(CSRF)攻击。

  2. 响应数据处理不够健壮

    • 直接访问 result.data[0],未校验 result.data 是否存在或是否为空数组,可能导致 TypeError(如 Cannot read properties of undefined)。

    • 没有错误处理逻辑,上传失败时用户无明确反馈。

  3. 代码可读性和维护性较差

    • 未对关键变量(如图片 URL)进行提取,代码逻辑不够清晰。

    • 缺少必要的注释,不利于后续维护。

之后修改完的代码与原本的代码相比优点:

  1. 安全性更高:集成 CSRF 防护,避免被 Spring Security 拦截或遭受攻击。

  2. 代码更健壮:通过变量提取和结构化编写,减少潜在错误。

  3. 更易维护:清晰的代码风格便于后续扩展和调试。

这个改进建议是我去将改好的代码发给AI给的建议

  • 补充 error 回调,处理网络或服务器错误。

  • 增加响应数据校验(如检查 response.errno 或 response.data 是否有效)。

我后面用的代码没有采用AI的建议,需要的朋友可以为了防止出现问题可以去根据建议优化一下。


解决方案:

解决这个问题主要分两步:

1.在需要的.html文件header头部中,通过代码以下代码片段一,直接复制到里面即可;

2.在做上传文件的div里面,去加上下面的<script>标签中的代码,相关修改代码片段一,片段二代码如下:

// 代码片段一<header>
<meta name="_csrf" th:content="${_csrf.token}"/><meta name="_csrf_header" th:content="${_csrf.headerName}"/>
</header>// 获取 Token 和 Header 名称
const token = document.querySelector('meta[name="_csrf"]').content;
const header = document.querySelector('meta[name="_csrf_header"]').content;// 在 AJAX 请求中添加 CSRF 头
fetch("/api/submit", {method: "POST",headers: {[header]: token  // 动态使用 header 名}
});
// 代码片段二<script>$("#pImageFile").change(function() {$("#uploadPImage").ajaxSubmit({url: "/backstage/product/upload",type: "post",headers: {"X-CSRF-TOKEN": $("meta[name='_csrf']").attr("content")},success: function(response) {// 安全访问数组元素// 图片上传成功后,图片回显到pImage上const imageUrl = response.data[0];$("#pImage").attr("src", imageUrl);// 上传成功后,图片地址存储在hiddenPImage中$("#hiddenPImage").val(imageUrl);}});});</script>

最后,也希望有更好的办法的话反馈给我,一起学习,谢谢大家了!!!

http://www.dtcms.com/a/312989.html

相关文章:

  • B3953 [GESP202403 一级] 找因数
  • 大模型智能体(Agent)技术全景:架构演进、协作范式与应用前沿
  • Python Dash 全面讲解
  • 使用 Vuepress + GitHub Pages 搭建项目文档
  • io_getevents系统调用及示例
  • Android 之 图片加载(Fresco/Picasso/Glide)
  • 第四章:OSPF 协议
  • Docker环境离线安卓安装指南
  • Android 之 存储(Assets目录,SharedPreferences,数据库,内部存储等)
  • 音视频学习(五十):音频无损压缩
  • 使用 Docker 部署 Golang 程序
  • 计数组合学7.12( RSK算法的一些推论)
  • 考研复习-计算机组成原理-第二章-数据的表示和运算
  • PHP面向对象编程与数据库操作完全指南-下
  • 深入解析C++函数重载:从原理到实践
  • 2025年测绘程序设计比赛--基于统计滤波的点云去噪(已获国特)
  • MySQL梳理三:查询与优化
  • python新功能match case|:=|typing
  • Hertzbeat如何配置redis?保存在redis的数据是可读数据
  • 【MySQL安全】什么是SQL注入,怎么避免这种攻击:前端防护、后端orm框架、数据库白名单
  • Android设备认证体系深度解析:GMS/CTS/GTS/VTS/STS核心差异与认证逻辑
  • ELECTRICAL靶机复现练习笔记
  • Leetcode:1.两数之和
  • Java 大视界 -- Java 大数据机器学习模型在金融市场情绪分析与投资决策辅助中的应用(379)
  • ubuntu24.04安装selenium、edge、msedgedriver
  • 05.Redis 图形工具RDM
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第四天(DOM编程和AJAX异步交互)
  • k8s+isulad 国产化技术栈云原生技术栈搭建1-VPC
  • 使用ACK Serverless容器化部署大语言模型FastChat
  • 如何在不停机的情况下,将MySQL单库的数据迁移到分库分表的架构上?