175 lines
3.6 KiB
Markdown
175 lines
3.6 KiB
Markdown
# 图片上传最终解决方案
|
||
|
||
## 当前状态
|
||
|
||
✅ 上传接口已实现 (`/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
|
||
```
|
||
|
||
前端应该显示上传成功,并能看到图片预览。
|