115 lines
3.3 KiB
Markdown
115 lines
3.3 KiB
Markdown
|
|
# 视频无法打开问题诊断
|
|||
|
|
|
|||
|
|
## 🔍 问题分析
|
|||
|
|
|
|||
|
|
### 当前文件路径情况
|
|||
|
|
```
|
|||
|
|
实际文件位置:D:\wwwroot\study_web\web\profile\upload\upload\2025\11\18\xxx.mp4
|
|||
|
|
^^^^^^ 重复了!
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 路径生成逻辑
|
|||
|
|
1. **配置文件**:`profile = D:\wwwroot\study_web\web\profile`
|
|||
|
|
2. **RuoYiConfig.getUploadPath()**:`profile + "/upload"` = `D:\wwwroot\study_web\web\profile\upload`
|
|||
|
|
3. **文件上传时**:在 `uploadPath` 下再创建日期目录:`upload/2025/11/18/`
|
|||
|
|
4. **最终物理路径**:`D:\wwwroot\study_web\web\profile\upload\2025\11\18\xxx.mp4` ✅ 正常
|
|||
|
|
|
|||
|
|
### 为什么会有两个 upload?
|
|||
|
|
|
|||
|
|
**可能原因:**
|
|||
|
|
1. 之前的配置是 `profile = D:\wwwroot\study_web\web\profile\upload`
|
|||
|
|
2. 导致实际上传路径变成:`D:\wwwroot\study_web\web\profile\upload\upload\...`
|
|||
|
|
3. 文件已经上传到了错误的路径
|
|||
|
|
|
|||
|
|
### URL 访问映射
|
|||
|
|
```
|
|||
|
|
URL 路径:/profile/**
|
|||
|
|
映射到:file:D:\wwwroot\study_web\web\profile/
|
|||
|
|
|
|||
|
|
示例:
|
|||
|
|
URL: http://192.168.0.106:30091/profile/upload/upload/2025/11/18/xxx.mp4
|
|||
|
|
映射: D:\wwwroot\study_web\web\profile/upload/upload/2025/11/18/xxx.mp4
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 解决方案
|
|||
|
|
|
|||
|
|
### 方案一:移动文件到正确位置(推荐)
|
|||
|
|
|
|||
|
|
将文件从错误位置移动到正确位置:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
从:D:\wwwroot\study_web\web\profile\upload\upload\2025\11\18\
|
|||
|
|
到:D:\wwwroot\study_web\web\profile\upload\2025\11\18\
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**操作步骤:**
|
|||
|
|
|
|||
|
|
1. **备份数据库**(重要!)
|
|||
|
|
|
|||
|
|
2. **移动文件**:
|
|||
|
|
```powershell
|
|||
|
|
# 在 PowerShell 中执行
|
|||
|
|
cd D:\wwwroot\study_web\web\profile\upload
|
|||
|
|
|
|||
|
|
# 将 upload 子目录下的所有文件移动到当前目录
|
|||
|
|
Move-Item -Path "upload\*" -Destination "." -Force
|
|||
|
|
|
|||
|
|
# 删除空的 upload 目录
|
|||
|
|
Remove-Item -Path "upload" -Recurse -Force
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **更新数据库中的文件路径**:
|
|||
|
|
```sql
|
|||
|
|
-- 更新课件表中的文件路径(去掉多余的 /upload)
|
|||
|
|
UPDATE study_courseware
|
|||
|
|
SET file_path = REPLACE(file_path, '/profile/upload/upload/', '/profile/upload/')
|
|||
|
|
WHERE file_path LIKE '/profile/upload/upload/%';
|
|||
|
|
|
|||
|
|
-- 检查更新结果
|
|||
|
|
SELECT id, name, file_path
|
|||
|
|
FROM study_courseware
|
|||
|
|
WHERE file_path LIKE '/profile/upload/%'
|
|||
|
|
LIMIT 10;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
4. **重启后端服务**
|
|||
|
|
|
|||
|
|
5. **测试视频访问**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 方案二:修改静态资源映射(临时方案)
|
|||
|
|
|
|||
|
|
如果不想移动文件,可以修改资源映射配置,让 `/profile/upload/upload/` 也能访问到文件。
|
|||
|
|
|
|||
|
|
**修改 ResourcesConfig.java**:
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
@Override
|
|||
|
|
public void addResourceHandlers(ResourceHandlerRegistry registry)
|
|||
|
|
{
|
|||
|
|
/** 本地文件上传路径 */
|
|||
|
|
registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**")
|
|||
|
|
.addResourceLocations("file:" + RuoYiConfig.getProfile() + "/")
|
|||
|
|
.setCacheControl(CacheControl.maxAge(7, TimeUnit.DAYS).cachePublic())
|
|||
|
|
.resourceChain(true);
|
|||
|
|
|
|||
|
|
// 临时方案:兼容旧的错误路径
|
|||
|
|
registry.addResourceHandler("/profile/upload/upload/**")
|
|||
|
|
.addResourceLocations("file:" + RuoYiConfig.getProfile() + "/upload/upload/")
|
|||
|
|
.setCacheControl(CacheControl.maxAge(7, TimeUnit.DAYS).cachePublic())
|
|||
|
|
.resourceChain(true);
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**缺点:** 这只是临时方案,不解决根本问题。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 方案三:批量修复(推荐用于生产环境)
|
|||
|
|
|
|||
|
|
创建一个批处理脚本自动修复:
|
|||
|
|
|