苍穹外卖菜品图片保存本地代码修改
今天学习苍穹外卖时,不想开通阿里云(但是阿里云的方法建议要学会),就搜集资料实现了本地存储图片,具体方法如下:
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重新命名了