173 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			173 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 编辑器图片上传问题修复
 | ||
| 
 | ||
| ## 问题描述
 | ||
| 编辑器里上传的图片无法显示。
 | ||
| 
 | ||
| ## 根本原因
 | ||
| 文件保存路径和静态文件URL映射不匹配。
 | ||
| 
 | ||
| ## 已完成的修改
 | ||
| 
 | ||
| ### 1. 后端文件保存路径 (`server/controllers/file.go`)
 | ||
| 
 | ||
| **修改前:**
 | ||
| ```go
 | ||
| uploadDir := path.Join("uploads", datePath)
 | ||
| ```
 | ||
| 文件保存到:`server/uploads/`
 | ||
| 
 | ||
| **修改后:**
 | ||
| ```go
 | ||
| uploadDir := path.Join("..", "uploads", datePath)
 | ||
| ```
 | ||
| 文件保存到:`项目根目录/uploads/`
 | ||
| 
 | ||
| ### 2. 静态文件映射 (`server/conf/app.conf`)
 | ||
| 
 | ||
| **修改前:**
 | ||
| ```conf
 | ||
| StaticDir = /uploads:uploads
 | ||
| ```
 | ||
| 
 | ||
| **修改后:**
 | ||
| ```conf
 | ||
| StaticDir = /uploads:../uploads
 | ||
| ```
 | ||
| 
 | ||
| 现在 `/uploads` URL 正确映射到项目根目录的 `uploads` 文件夹。
 | ||
| 
 | ||
| ### 3. 前端URL拼接 (`front/src/components/WangEditor.vue`)
 | ||
| 
 | ||
| 添加了更健壮的URL拼接逻辑:
 | ||
| 
 | ||
| ```typescript
 | ||
| const fileUrl = response.data.data.file_url; // /uploads/2024/01/15/xxx.jpg
 | ||
| const baseUrl = getUploadUrl() ;
 | ||
| 
 | ||
| let fullUrl = fileUrl;
 | ||
| if (!fileUrl.startsWith('http')) {
 | ||
|   const base = baseUrl.replace(/\/$/, '');
 | ||
|   const url = fileUrl.startsWith('/') ? fileUrl : '/' + fileUrl;
 | ||
|   fullUrl = `${base}${url}`;
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| 这样可以确保URL正确拼接为:`http://localhost:8080/uploads/2024/01/15/xxx.jpg`
 | ||
| 
 | ||
| ## 目录结构
 | ||
| 
 | ||
| 上传后文件将保存在:
 | ||
| 
 | ||
| ```
 | ||
| yunzer_go/
 | ||
| ├── server/
 | ||
| ├── front/
 | ||
| └── uploads/                    ← 文件保存位置
 | ||
|     ├── 2024/
 | ||
|     │   └── 01/
 | ||
|     │       └── 15/
 | ||
|     │           └── 20240115143045_example.jpg
 | ||
| ```
 | ||
| 
 | ||
| ## 访问URL
 | ||
| 
 | ||
| 上传后可以通过以下URL访问:
 | ||
| 
 | ||
| ```
 | ||
| http://localhost:8080/uploads/2024/01/15/20240115143045_example.jpg
 | ||
| ```
 | ||
| 
 | ||
| ## 如何验证
 | ||
| 
 | ||
| ### 1. 上传一个图片
 | ||
| 在编辑器中使用图片上传功能上传一张图片。
 | ||
| 
 | ||
| ### 2. 查看控制台日志
 | ||
| 打开浏览器开发者工具(F12),查看 Console 标签,应该看到:
 | ||
| ```
 | ||
| 图片上传成功,URL: http://localhost:8080/uploads/2024/01/15/xxx.jpg
 | ||
| ```
 | ||
| 
 | ||
| ### 3. 检查文件是否保存
 | ||
| 查看项目根目录的 `uploads` 文件夹:
 | ||
| ```bash
 | ||
| ls uploads/2024/01/15/
 | ||
| ```
 | ||
| 
 | ||
| ### 4. 测试URL访问
 | ||
| 在浏览器中直接访问图片URL,应该能看到图片。
 | ||
| 
 | ||
| ### 5. 检查数据库
 | ||
| 查看 `yz_files` 表中的记录:
 | ||
| ```sql
 | ||
| SELECT file_path, file_url FROM yz_files ORDER BY upload_time DESC LIMIT 1;
 | ||
| ```
 | ||
| 
 | ||
| 应该看到:
 | ||
| - `file_path`: `uploads/2024/01/15/xxx.jpg`
 | ||
| - `file_url`: `/uploads/2024/01/15/xxx.jpg`
 | ||
| 
 | ||
| ## 重启服务器
 | ||
| 
 | ||
| 修改配置后需要重启服务器才能生效:
 | ||
| 
 | ||
| ```bash
 | ||
| cd server
 | ||
| go run main.go
 | ||
| ```
 | ||
| 
 | ||
| 或者如果使用编译后的可执行文件:
 | ||
| 
 | ||
| ```bash
 | ||
| ./server.exe
 | ||
| ```
 | ||
| 
 | ||
| ## 如果还是看不到图片
 | ||
| 
 | ||
| ### 检查清单
 | ||
| 
 | ||
| 1. ✅ 服务器是否重启
 | ||
| 2. ✅ 文件是否保存到 `uploads` 目录
 | ||
| 3. ✅ 浏览器控制台是否有错误
 | ||
| 4. ✅ URL是否正确拼接
 | ||
| 5. ✅ 静态文件映射是否正确
 | ||
| 
 | ||
| ### 常见问题
 | ||
| 
 | ||
| **Q: 上传后文件保存在哪里?**
 | ||
| A: 项目根目录的 `uploads` 文件夹
 | ||
| 
 | ||
| **Q: 图片URL是什么格式?**
 | ||
| A: `http://localhost:8080/uploads/2024/01/15/filename.jpg`
 | ||
| 
 | ||
| **Q: 为什么看不到图片?**
 | ||
| A: 检查:
 | ||
| - 文件是否正确保存
 | ||
| - URL是否可访问
 | ||
| - 浏览器控制台错误信息
 | ||
| - 服务器是否重启
 | ||
| 
 | ||
| **Q: 如何自定义上传目录?**
 | ||
| A: 修改 `server/controllers/file.go` 和 `server/conf/app.conf` 中的路径配置
 | ||
| 
 | ||
| ## 调试建议
 | ||
| 
 | ||
| 如果图片仍不显示,检查以下内容:
 | ||
| 
 | ||
| 1. **查看浏览器网络请求**
 | ||
|    - F12 → Network 标签
 | ||
|    - 查看图片请求是否返回 200
 | ||
|    - 如果返回 404,说明路径不对
 | ||
| 
 | ||
| 2. **查看浏览器控制台**
 | ||
|    - 查看是否有 CORS 错误
 | ||
|    - 查看上传成功后的 URL 是什么
 | ||
| 
 | ||
| 3. **查看服务器日志**
 | ||
|    - 确认文件是否正确上传
 | ||
|    - 确认路径是否正确
 | ||
| 
 | ||
| 4. **检查文件权限**
 | ||
|    - 确保应用有创建目录和写入文件的权限
 | ||
| 
 |