由于各大浏览器都不支持FLASH,外挂了HTML5组件实现头像上传
FLASH最终还是没能跟上时代的步伐,被各大浏览器抛弃,我们这老破旧论坛连头像也上传不了,花了一个星期反编译了Discuz7.2的FLASH头像上传逻辑,并把这套逻辑转移到了X2身上,用同样的方法外挂了一个HTML5的插件去替代原来的FLASH,恢复了头像的上传,
虽然界面上还有些粗糙,但起嘛能用了,如果各位发现头像上传有什么问题可以跟帖留言。
Discuz X2 HTML5 头像插件 v1.0 2026-05-05
==============================
【目录结构】
upload/
├── html5avatar.php 插件后端接口(核心逻辑)
└── template/
└─ default/
└─ home/
└─ spacecp_avatar.htm 前端模板(含 Cropper.js)
【适用环境】
- Discuz! X2 UTF-8
- UCenter 1.6
- PHP 5.6+
【安装方法】
1. 将 upload 目录下的文件,按路径覆盖到你网站根目录
2. 特别注意:
本修改仅限使用默认模板,路径为:/templates/default/home/spacecp_avatar.htm
(如果你使用了其它模板,请自行替换文件标注部分代码。)
3. 确保目录权限:
chmod -R 755 uc_server/data/avatar
4. 进入:
点头像进入 →个人空间 → 编辑头像
即可使用 HTML5 上传
【说明】
- 会直接替换 Flash 头像入口
- 无需安装、无需后台开启
- 不影响 UCenter 原有逻辑
- 保留头像简单裁剪功能(Cropper.js)
- 仅新增一个htnl5上传组件
打包收藏放这,免得老人痴呆 :AA13
修复多媒体控件:把原来多媒体的FLASH控件替换为HTML5原生多媒体控件
原多媒体控件:function parseaudio($url, $width = 400) {$ext = strtolower(substr(strrchr($url, '.'), 1, 5));
switch($ext) {
case 'mp3':
case 'wma':
case 'mid':
case 'wav':
return '<object classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" ...>';
case 'ra':
case 'rm':
case 'ram':
return '<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" ...>';
}
}
function parsemedia($params, $url) {
...
return parseaudio($url, $width);
}
新的 HTML5 播放控件:
// 替换原代码为 HTML5 播放控件
function parseaudio($url, $width = 400) {
$url = str_replace('\\"', '"', $url);
$ext = strtolower(substr(strrchr($url, '.'), 1, 5));
switch($ext) {
case 'mp3':
case 'wma':
case 'wav':
case 'mid':
case 'ogg':
return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:2px;" src="'.$url.'"> </audio>';
case 'ra':
case 'rm':
case 'ram':
// RM 无法 HTML5 播放,退化为链接
return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
}
}
function parsemedia($params, $url) {
$params = explode(',', $params);
$width = isset($params) && intval($params) ? intval($params) : 400;
$height = isset($params) && intval($params) ? intval($params) : 300;
$width = min($width, 800);
$height = min($height, 600);
$url = str_replace(array('<', '>'), '', str_replace('\\"', '"', $url));
$ext = strtolower(substr(strrchr($url, '.'), 1, 5));
/* HTML5 优先(现代浏览器) */
if(in_array($ext, array('mp3','wav','ogg'))) {
return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:6px;">
<source src="'.$url.'" type="audio/mpeg">
</audio>';
}
if(in_array($ext, array('mp4','webm','ogg'))) {
return '<video controls style="width:100%;max-width:'.$width.'px;border-radius:6px;"
poster="">
<source src="'.$url.'" type="video/mp4">
</video>';
}
/* Flash 逻辑保留(但不指望能用) */
if(in_array(count($params), array(3, 4))) {
$type = $params;
switch($type) {
case 'mp3':
case 'wma':
case 'ra':
case 'ram':
case 'wav':
case 'mid':
return parseaudio($url, $width);
case 'rm':
case 'rmvb':
case 'rtsp':
return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
case 'flv':
case 'swf':
return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
case 'asf':
case 'asx':
case 'wmv':
case 'mms':
case 'avi':
case 'mpg':
case 'mpeg':
return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
case 'mov':
return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
default:
return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
}
}
return;
}
原FLASH已死:
function parseflash($w, $h, $url) {
$w = !$w ? 550 : $w;
$h = !$h ? 400 : $h;
preg_match("/((https?){1}:\/\/|www\.)[^\[\"']+/i", $url, $matches);
$url = $matches;
$randomid = 'swf_'.random(3);
if(fileext($url) != 'flv') {
return '<span id="'.$randomid.'"></span><script type="text/javascript" reload="1">$(\''.$randomid.'\').innerHTML=AC_FL_RunContent(\'width\', \''.$w.'\', \'height\', \''.$h.'\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', \''.$url.'\', \'quality\', \'high\', \'bgcolor\', \'#ffffff\', \'wmode\', \'transparent\', \'allowfullscreen\', \'true\');</script>';
} else {
return '<span id="'.$randomid.'"></span><script type="text/javascript" reload="1">$(\''.$randomid.'\').innerHTML=AC_FL_RunContent(\'width\', \''.$w.'\', \'height\', \''.$h.'\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', \''.STATICURL.'image/common/flvplayer.swf\', \'flashvars\', \'file='.rawurlencode($url).'\', \'quality\', \'high\', \'wmode\', \'transparent\', \'allowfullscreen\', \'true\');</script>';
}
}不得已的修改方案(让原来的播放器直接显示为FLASH链接):function parseflash($w, $h, $url) {
return '<a href="'.$url.'" target="_blank" rel="noopener noreferrer">'.$url.'</a>';
} :AA33:AA66
页:
[1]