浪浪 发表于 2026-5-10 21:51:51

由于各大浏览器都不支持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上传组件

Longe 发表于 2026-5-10 22:58:22

打包收藏放这,免得老人痴呆

yupopp 发表于 2026-5-11 16:59:46

:AA13

Longe 发表于 2026-5-18 10:25:41

修复多媒体控件:把原来多媒体的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;
}

Longe 发表于 2026-5-18 11:03:28

原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>';
}

哦si矛夹送 发表于 2026-6-9 20:41:31

:AA33:AA66
页: [1]
查看完整版本: 由于各大浏览器都不支持FLASH,外挂了HTML5组件实现头像上传

免 责 声 明 :本网站刊载相关信息仅出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性、正确性或可靠性;本网站信息仅代表作者本人的观点,不代表本站的观点和看法,与本站立场无关,文责作者自负;若访问者因接受并承认信赖该信息所生的风险,则由其自行承担。

常年法律顾问:广东瑞霆律师事务所 温丰台律师