在Discuz系统中遇到无法上传视频的问题,可通过以下步骤排查解决:
1. **附件类型配置**
进入后台 → 全局 → 上传设置 → 附件类型扩展名:
- 在视频格式栏补充常见格式:mp4|avi|mov|flv|wmv|mkv
- 注意不同用户组需单独设置允许上传的视频格式
2. **容量限制调整**
同时修改三个关联参数:
- PHP配置(php.ini):
upload_max_filesize = 1024M
post_max_size = 1080M
max_execution_time = 300
- Web服务器配置(以Nginx为例):
client_max_body_size 1024m;
- Discuz后台设置:
全局 → 上传设置 → 视频文件最大尺寸(建议与PHP配置保持10%余量)
3. **存储路径检测**
检查data目录权限:
- chown -R www:www data/
- chmod -R 755 data/
复制代码
通过FTP验证attachment目录是否自动生成视频子目录(按年月分级存储)
4. **用户组权限二次校验**
用户组 → 论坛相关 → 附件相关:
- 确保勾选"允许上传视频"
- 注意继承关系(特殊用户组优先级高于扩展组)
5. **转码检测机制绕过**
在source/class/class_upload.php约237行:
- if($this->attach['ext'] == 'mp4' && !$this->isconvert($this->attach['tmp_name'])) {
- // 注释掉原始转码判断逻辑
- // $this->errorcode = UPLOAD_ERR_VIDEO_TRANSCODE;
- // return false;
- }
复制代码
6. **MIME类型白名单扩展**
在source/class/class_upload.php中增加:
- 'video/mp4' => array('mp4'),
- 'video/x-flv' => array('flv'),
- 'video/quicktime' => array('mov')
复制代码
7. **视频预览生成优化**
修改source/class/class_media.php:
- $video_thumb = $this->getframe($filepath, $timemark = 5); // 提取第5秒为封面
- if(empty($video_thumb)) {
- // 使用备用方案生成缩略图
- $video_thumb = $this->createFallbackThumb();
- }
复制代码
8. **跨域上传异常处理**
在config/config_global.php增加:
- $_config['security']['uploaddomain'] = '您的CDN域名';
- $_config['security']['referercheck'] = 0; // 开发环境可临时关闭
复制代码
排查完毕后建议:
1. 清理data/cache目录
2. 重建主题分类缓存
3. 使用Chrome开发者工具查看上传请求的完整响应信息
4. 在测试环境使用X3.5新版上传组件测试
若仍存在问题,建议提供:
- 具体的HTTP错误代码(413/500等)
- 服务器环境详细信息(PHP版本/内存限制)
- 浏览器控制台报错截图
- 视频文件的编码信息(可用MediaInfo工具获取)
通过以上专业级排查流程,可系统解决Discuz视频上传异常问题。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |