# 图片上传最终解决方案 ## 当前状态 ✅ 上传接口已实现 (`/api/file/upload`) ✅ 前端可以选择文件并发送请求 ✅ 后端接收到文件 (92656 bytes) ✅ Vite代理配置已修复 (8089端口) ✅ 配置已改为本地保存模式 ❌ 文件保存过程出现问题(日志中断) ## 问题分析 从日志看,请求在 `FileUploadController` 接收到文件后就停止了,说明: 1. `fileUploadService.uploadFile(file)` 调用时出现了异常 2. 异常被捕获但没有记录详细日志 3. 可能是目录权限或路径问题 ## 解决方案 ### 方案1: 使用更简单的本地路径(推荐) 修改 `application.yml`: ```yaml file: upload: mode: local local-path: C:/peidu-uploads/ # 使用C盘,避免权限问题 url-prefix: http://localhost:8089/uploads/ ``` ### 方案2: 检查D盘权限 如果坚持使用D盘: 1. 手动创建 `D:/uploads/` 目录 2. 右键 → 属性 → 安全 → 确保当前用户有完全控制权限 ### 方案3: 使用用户目录 最安全的方式: ```yaml file: upload: mode: local local-path: ${user.home}/peidu-uploads/ # 使用用户主目录 url-prefix: http://localhost:8089/uploads/ ``` ## 完整配置示例 ### application.yml ```yaml spring: servlet: multipart: max-file-size: 10MB max-request-size: 10MB file: upload: mode: local local-path: C:/peidu-uploads/ url-prefix: http://localhost:8089/uploads/ allowed-types: jpg,jpeg,png,gif,bmp,webp max-size: 10 ``` ### vite.config.js ```javascript server: { port: 5173, proxy: { '/api': { target: 'http://localhost:8089', // 注意是8089端口 changeOrigin: true } } } ``` ## 测试步骤 ### 1. 修改配置 选择上面的方案1,使用 `C:/peidu-uploads/` ### 2. 重新编译后端 ```bash # 如果使用IDE,点击 Build → Rebuild Project # 如果使用Maven命令行 cd peidu/backend mvn clean compile ``` ### 3. 重启后端 停止并重新启动后端服务 ### 4. 测试上传 在管理后台上传一张图片,查看: - 后端日志输出 - `C:/peidu-uploads/` 目录是否有文件 - 前端是否显示成功 ### 5. 验证访问 如果上传成功,在浏览器中访问返回的URL: ``` http://localhost:8089/uploads/20260125_xxx.png ``` 应该能看到图片。 ## 常见问题 ### Q1: 后端日志还是在同一个地方停止 **A**: 代码没有重新编译,需要Rebuild项目 ### Q2: 提示"无法创建目录" **A**: 权限问题,换成C盘或用户目录 ### Q3: 上传成功但访问404 **A**: 静态资源映射问题,检查 `FileStorageConfig.java` ### Q4: 前端显示"文件大小不能超过10485760MB" **A**: 这是显示bug,实际限制是10MB,不影响功能 ## 下一步 上传功能测试通过后: 1. **清空旧轮播图数据** ```sql DELETE FROM banner; ``` 2. **重新上传新轮播图** 使用管理后台上传 3. **切换回远程模式**(可选) 如果需要上传到服务器,改回 `mode: remote` ## 快速修复命令 ```bash # 1. 创建上传目录 mkdir C:\peidu-uploads # 2. 重新编译后端 cd peidu/backend mvn clean compile # 3. 重启后端服务 # 4. 测试上传 ``` ## 预期结果 上传成功后,后端日志应该显示: ``` === 上传图片(智能模式) === 文件名: xxx.png 文件大小: 92656 bytes 上传模式: local 使用本地保存模式 本地保存路径: C:/peidu-uploads/ 文件保存成功: C:\peidu-uploads\20260125_xxx.png 返回URL: http://localhost:8089/uploads/20260125_xxx.png ``` 前端应该显示上传成功,并能看到图片预览。