# 视频无法打开问题诊断 ## 🔍 问题分析 ### 当前文件路径情况 ``` 实际文件位置: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); } ``` **缺点:** 这只是临时方案,不解决根本问题。 --- ### 方案三:批量修复(推荐用于生产环境) 创建一个批处理脚本自动修复: