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

苍穹外卖菜品图片保存本地代码修改

今天学习苍穹外卖时,不想开通阿里云(但是阿里云的方法建议要学会),就搜集资料实现了本地存储图片,具体方法如下:

1.先在server文件夹中的\src\main\resources中创建一个存放图片的upload文件夹,你也可以存放在别的地方,只要修改路径即可

位置:

2.修改WebMvcConfiguration里的 addResourceHandlers 方法。

修改server文件夹中的WebMvcConfiguration文件里的addResourceHandlers 方法,路径改为自己的绝对路径即可

位置:

代码如下: 

    protected void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");//配置好静态资源路径(有改动的地方)registry.addResourceHandler("/static/**").addResourceLocations("file:C:/Users/Abola/Desktop/cq/资料/资料/day01/后端初始工程/sky-take-out/sky-server/src/main/resources/upload/");}

3.修改CommonController,直接把下面代码全部复制替换掉原来的

位置:

代码如下:

package com.sky.controller.admin;import com.sky.constant.MessageConstant;
import com.sky.result.Result;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.UUID;/*** ClassName: CommonController* Package: com.sky.controller.admin* Description:* * @Author Abola* @Create 2025/4/16 11:07* @Version 1.0*/
@RestController
@RequestMapping("/admin/common")
@Api(tags = "文件上传")
@Slf4j
public class CommonController {private static String FILE_UPLOAD_PATH = "C:\\Users\\Abola\\Desktop\\cq\\资料\\资料\\day01\\后端初始工程\\sky-take-out\\sky-server\\src\\main\\resources\\upload\\";@PostMapping("/upload")@ResponseBodypublic Result uploadfile(@RequestParam("file") MultipartFile file) throws IOException {if (file.isEmpty()) {return Result.error("文件不能为空");}File dir = new File(FILE_UPLOAD_PATH);if (!dir.exists() || !dir.isDirectory()) {boolean created = dir.mkdirs();if(created) {log.info("创建文件夹成功: {}", FILE_UPLOAD_PATH);} else {log.warn("创建文件夹失败或已经存在: {}", FILE_UPLOAD_PATH);}}String originalFilename = file.getOriginalFilename();if (originalFilename == null || originalFilename.isEmpty()) {return Result.error("文件名无效");}// 获取后缀String extension = originalFilename.substring(originalFilename.lastIndexOf("."));if (!extension.equalsIgnoreCase(".png") && !extension.equalsIgnoreCase(".jpg") && !extension.equalsIgnoreCase(".jpeg")) {return Result.error("文件格式不支持");}// 拼接新的随机名称originalFilename = UUID.randomUUID().toString() + extension;// 确保文件路径安全,避免路径遍历攻击Path targetLocation = Paths.get(FILE_UPLOAD_PATH).resolve(originalFilename).normalize();try {Files.copy(file.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);log.info("文件上传成功: {}", originalFilename);} catch (IOException e) {log.error("文件上传失败: {}", originalFilename, e);return Result.error(MessageConstant.UPLOAD_FAILED);}// 你可以根据实际情况调整返回的文件访问链接String fileUrl = "http://localhost:8080/static/" + originalFilename;return Result.success(fileUrl);}
}

 测试:添加后可以立即回显,无需开通阿里云

upload文件夹里可以看到上传的图片,且使用uuid重新命名了
 

相关文章:

  • 【多线程-第四天-NSCache Objective-C语言】
  • Jetpack Compose 实现主页面与局部页面独立刷新的最佳实践
  • 四六级听力调频广播有线传输无线覆盖系统:弥补单一发射系统安全缺陷,构建稳定可靠听力系统平台
  • Hadoop集群部署教程-P3
  • udhcpc和udhcpd的区别
  • vue3+element-plus实现省市区三级地址多选
  • 【技术派后端篇】ElasticSearch 实战指南:环境搭建、API 操作与集成实践
  • 如何在 Kali 上解决使用 evil-winrm 时 Ruby Reline 的 quoting_detection_proc 警告
  • DeepSeek模型剪枝策略是什么?如何让AI更轻更快更聪明!
  • 从零到一:网站设计新手如何快速上手?
  • GRPO训练器 文档
  • argparse
  • LeetCode 第54~55题
  • CentOS 操作系统下搭建 tsung性能测试环境
  • TCP实现多线程远程命令执行
  • TCP粘包:数据为何‘难舍难分’?拆解底层原理与实战解决方案
  • 解释`new`关键字的执行过程,并手动实现一个`myNew`函数。
  • Vue快速入门
  • pandas中curr函数报错ValueError: could not convert string to float: ‘RL‘解决办法
  • 《Operating System Concepts》阅读笔记:p700-p732
  • 让别人做网站的步骤/怎么引流怎么推广自己的产品
  • 做网站怎么做/搜索引擎排名谷歌
  • 成华区微信网站建/企业网站管理
  • 微信网站开发哪家好/seo刷点击软件
  • 登录自治区建设厅的网站查询/扬州网络推广公司
  • 做网站是学什么专业的/网址之家大全