【高州情】高州人深圳站

 找回密码
 立即加入
查看: 579|回复: 5
打印 上一主题 下一主题

由于各大浏览器都不支持FLASH,外挂了HTML5组件实现头像上传 [复制链接]

Rank: 8Rank: 8Rank: 8Rank: 8

金币
564
贡献
0
威望
7
最后登录
2026-6-12
帖子
78
积分
54
UID
2564
跳转到指定楼层
1
发表于 2026-5-10 21:51:51 |只看该作者 |倒序浏览
FLASH最终还是没能跟上时代的步伐,被各大浏览器抛弃,我们这老破旧论坛连头像也上传不了,花了一个星期反编译了Discuz7.2的FLASH头像上传逻辑,并把这套逻辑转移到了X2身上,
) O2 s8 E# |( U; R1 G用同样的方法外挂了一个HTML5的插件去替代原来的FLASH,恢复了头像的上传,! r: a0 k9 X! A+ Z
虽然界面上还有些粗糙,但起嘛能用了,如果各位发现头像上传有什么问题可以跟帖留言。
& f" z, ~6 u4 J% ^. c

1 d' R: r) k) A2 B# F+ Q; [
4 C$ I5 z9 R& D7 [

: Y( x2 u- e0 V& H2 o8 v  N9 j% U4 j: u9 E. L$ H8 {  k
Discuz X2 HTML5 头像插件 v1.0  2026-05-05
! c: i6 i* m* n9 W  N; M==============================
& Z/ A( G- k: M. Q3 i【目录结构】) `, P' F9 Y$ v% v3 O/ p
upload/
. ~/ A. Q" }, N( r8 a. k- n├── html5avatar.php        插件后端接口(核心逻辑)
' }: J2 Z. n6 ^( Z* i└── template/
- d/ S) f' u3 A7 d        └─ default/- b; S  A; @$ A1 ~
            └─ home/
$ X+ r: T/ A, O( ^6 A2 g8 x+ k                └─ spacecp_avatar.htm        前端模板(含 Cropper.js)
8 I2 j4 i4 W3 H+ @6 Z8 q) q5 r& U' w6 |& ^
【适用环境】9 W7 H3 I2 B/ R( J4 ?
- Discuz! X2 UTF-8% H/ u9 o6 G. ^' B. S
- UCenter 1.62 Z$ o4 K3 H, ^, P4 f
- PHP 5.6+9 q3 O* o7 \) n) l
* W4 X3 T1 M/ O" ]6 x* z
【安装方法】; n+ k' z  Z1 a- R6 u
1. 将 upload 目录下的文件,按路径覆盖到你网站根目录
/ V, c- w, H  }, l3 [* ]2 y+ r3 q# A1 m4 J: S) _' D2 `
2. 特别注意:$ u$ t1 O4 \& S+ G
   本修改仅限使用默认模板,路径为:/templates/default/home/spacecp_avatar.htm
& z- k& n" ]$ q* G+ R; ]   (如果你使用了其它模板,请自行替换文件标注部分代码。)5 J% o$ L  X5 w! S7 ]

- G) p0 U. p+ T; @5 Y- \. V& ], u, W3. 确保目录权限:6 T$ \+ n% Y& o) b4 s2 t
   chmod -R 755 uc_server/data/avatar7 a" f  M  e* H0 ^& w/ ~  k

# b0 y  N/ o7 J+ k. X4. 进入:  C4 o6 _1 ~) G* @3 f( L8 _
   点头像进入 →个人空间 → 编辑头像8 ~% z6 M& b2 d1 I8 m
   即可使用 HTML5 上传
' ~+ P" U9 b; M# A) d# i) d  Q8 s5 E9 ?% n- ?5 `2 m  ?% H
【说明】: c, Y' k* W0 k: [) a! v
- 会直接替换 Flash 头像入口
, R1 |1 E  d6 B- 无需安装、无需后台开启
. ?1 f! c7 A+ Z2 O- _/ e- 不影响 UCenter 原有逻辑
2 w9 Z, [# F  P/ J: G' x2 q- 保留头像简单裁剪功能(Cropper.js)
  S2 V( a1 z  i0 h; F$ }- 仅新增一个htnl5上传组件

% l$ D7 }. n  T9 f' [( s+ c$ Y) i. o3 O- z
附件: 你需要登录才可以下载或查看附件。没有帐号?立即加入

管理员

论坛测试[砖]家

Rank: 12Rank: 12Rank: 12Rank: 12

金币
7316
贡献
615
威望
9151
最后登录
2026-8-24
帖子
1875
积分
25896
UID
10

论坛元老 网络高手 新人进步奖

2
发表于 2026-5-10 22:58:22 |只看该作者
打包收藏放这,免得老人痴呆
附件: 你需要登录才可以下载或查看附件。没有帐号?立即加入
这个世界只有10种人:一种是懂2进制的,另一种是不懂的。

【情系根子】〓 https://525247.net 〓

个人业余电台:BI7ILX   守候频率:1343212JJ08

管理员

BI7NOR

Rank: 12Rank: 12Rank: 12Rank: 12

金币
1788
贡献
251
威望
11796
最后登录
2026-7-15
帖子
3471
积分
28539
UID
1

终身成就 特殊贡献 论坛元老 优秀斑竹 勤奋斑主 优秀会员 论坛之星 金点子奖 宣传大使 建议之星 原创先锋 贴图先锋 解答高手 网络高手 情感大使 幽默大师 活跃之星 体育之星 音乐之星 灌水先锋

3
发表于 2026-5-11 16:59:46 |只看该作者

管理员

论坛测试[砖]家

Rank: 12Rank: 12Rank: 12Rank: 12

金币
7316
贡献
615
威望
9151
最后登录
2026-8-24
帖子
1875
积分
25896
UID
10

论坛元老 网络高手 新人进步奖

4
发表于 2026-5-18 10:25:41 |只看该作者

修复多媒体控件:把原来多媒体的FLASH控件替换为HTML5原生多媒体控件

原多媒体控件:
  1. function parseaudio($url, $width = 400) {
    * i0 |3 I( B. l" C* \- N
  2.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));
    / x* D% {; g* A5 G/ w: D1 e4 [
  3.         switch($ext) {5 R& s- N. z4 }8 a
  4.                 case 'mp3':/ c+ c8 Y! G' t5 n5 s. t1 R
  5.                 case 'wma':
    - L8 S7 Q6 C- O7 h9 I0 e% S
  6.                 case 'mid':; n* N* V! l  B8 X
  7.                 case 'wav':. l8 h+ ~% M3 X7 r  B
  8.                         return '<object classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" ...>';
    - [) s9 `0 b' c& ~! @# j
  9.                 case 'ra':
      |3 r  h9 c9 x4 t
  10.                 case 'rm':" s; H5 W; X0 l
  11.                 case 'ram':, l4 E/ @7 q/ |! B
  12.                         return '<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" ...>';0 N& G; w# K& W! D" a% q
  13.         }
    ; Z- i/ R; {$ A/ ]
  14. }! m( l3 c% C0 W- \
  15. # B1 c$ ]' ?. `/ D- R
  16. function parsemedia($params, $url) {
    ; f) `8 z& n% }$ N8 x. W
  17.         ...
    0 k; R5 g( }: T
  18.         return parseaudio($url, $width);/ B/ [/ B2 v# w  o/ s( I6 J
  19. }
复制代码
新的 HTML5 播放控件:
  1. // 替换原代码为 HTML5 播放控件
    . @; f$ x! s2 m% h3 Y) ]7 b
  2. function parseaudio($url, $width = 400) {+ t! N; J. ?$ a. P
  3.         $url = str_replace('\\"', '"', $url);
    ( t6 t% ~- ~/ W; M- e
  4.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));& `/ u" Y6 w7 k5 y5 d8 R9 n: y2 N: C

  5. * M9 a+ _% u, v% D/ B8 X
  6.         switch($ext) {& E5 u# U9 z) e3 S( T3 z. I
  7.                 case 'mp3':
    8 b$ f4 x. q& O. _, R4 i
  8.                 case 'wma':+ A3 M! u' i! [
  9.                 case 'wav':
    8 r% e+ P9 i0 B7 c
  10.                 case 'mid':1 {6 Y: r$ Q# T* C7 j+ n! ]1 _
  11.                 case 'ogg':
    ) ]7 R, k# V( U7 N) n) Q
  12.                         return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:2px;" src="'.$url.'"> </audio>';
    1 |' E, O6 [. R6 {; t
  13.                 case 'ra':* H+ A2 L3 N$ ]$ I, g* M9 s
  14.                 case 'rm':
    9 f, P9 c3 O& X& @- C/ k
  15.                 case 'ram':! {& k9 A* N; X0 {% x
  16.                         // RM 无法 HTML5 播放,退化为链接
    / m! @* a, V0 h6 Z1 A( Q/ x
  17.                         return '<a href="'.$url.'" target="_blank">'.$url.'</a>';9 ^- @- T8 A# d7 x1 `
  18.         }
    2 s8 k3 N2 f  W" p# T
  19. }
    / G% ^5 @2 X! E
  20. 9 C9 J0 D8 o+ a# ~4 r
  21. function parsemedia($params, $url) {! H5 K) g3 c- R' }

  22. : p4 u# q3 j. }6 v: I
  23.         $params = explode(',', $params);2 a. e. _/ a: E* n
  24. $ @0 f  i# f% P/ b: T
  25.         $width  = isset($params[1]) && intval($params[1]) ? intval($params[1]) : 400;
    8 G3 e. u' A, u1 l1 K% z
  26.         $height = isset($params[2]) && intval($params[2]) ? intval($params[2]) : 300;
    ( b$ u6 R: O7 V1 F

  27. , V; _9 f& C4 K  N0 r4 [- k3 j) g& E
  28.         $width  = min($width, 800);6 T5 W* z  I2 M7 v
  29.         $height = min($height, 600);
    5 S1 ?7 D# o# v4 P

  30. 9 G& K  M/ M% l/ l4 Z: @$ ~
  31.         $url = str_replace(array('<', '>'), '', str_replace('\\"', '"', $url));  v# e/ p! U  u' w) ~+ p! u
  32.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));
    " D: l. i# U  A% E4 e- `
  33. , c. G! B7 ?  h( Q  F# I/ T1 X2 u
  34.         /* HTML5 优先(现代浏览器) */3 G8 T9 F$ z, ?2 r, R* {% M
  35.         if(in_array($ext, array('mp3','wav','ogg'))) {
    + r4 o5 K0 D! P" W9 [
  36.                 return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:6px;">! ~) d+ m% |, W4 m2 A4 L" m5 `+ W
  37.                                         <source src="'.$url.'" type="audio/mpeg">
    # d2 I. V! ^7 p% f+ W
  38.                                 </audio>';- y- R; J  R+ u3 d  ~- g8 A
  39.         }
    ! Z* j; `( k7 i! E
  40. ; I9 o, J& f/ W- ?  G  c/ t
  41.         if(in_array($ext, array('mp4','webm','ogg'))) {
    % i" v5 M$ X5 Y1 j7 g! p
  42.                 return '<video controls style="width:100%;max-width:'.$width.'px;border-radius:6px;"
    2 e1 c* w: ^/ N1 _5 Q% |
  43.                                          poster="">" R! K; {) u2 _  K" p9 v
  44.                                         <source src="'.$url.'" type="video/mp4">! C' N8 E9 ?- C3 Y
  45.                                 </video>';1 H4 i. @  y$ t( d' v
  46.         }/ s! O7 A# O8 Q! h' G8 W
  47. 7 I/ k( z3 Q/ k
  48.         /* Flash 逻辑保留(但不指望能用) */( k/ H4 J* ?. j! V# c" ~
  49.         if(in_array(count($params), array(3, 4))) {) X7 }9 \( x8 [
  50.                 $type = $params[0];
    6 Z4 g, q2 d# n+ a, X
  51.   K, R8 B9 L- \6 P( e/ m
  52.                 switch($type) {
    " h- W, g7 H1 r8 B
  53.                         case 'mp3':) N% Z( i9 @5 H3 F1 o5 h
  54.                         case 'wma':
    / [# A6 Q# R2 L1 b* Z3 l
  55.                         case 'ra':
    1 D9 o4 }, V% g( ~( A
  56.                         case 'ram':
    6 ?- |; V; _3 |6 x
  57.                         case 'wav':( H4 c0 y+ G3 Q7 ^3 c0 g
  58.                         case 'mid':
    " t2 K: ]% W7 j: e3 w. j
  59.                                 return parseaudio($url, $width);
    0 @0 S8 E+ e. Y% ~- e( P
  60. ; |9 A* t5 x( }$ R* }: o
  61.                         case 'rm':
    % i- j9 g9 z2 Y1 O( N; J
  62.                         case 'rmvb':
    % i/ I4 p: l' T0 X2 j5 H5 C- R) ?
  63.                         case 'rtsp':3 \9 H" \- S$ H
  64.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';/ A$ |- D8 x* ], s1 V
  65. * ]$ ~% i8 i! a, O
  66.                         case 'flv':
    , C1 \1 T& p+ H" z
  67.                         case 'swf':0 {1 D+ w: M% g  a
  68.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';, V" w9 T6 @% S0 G8 ]: A: x' M1 V7 Z
  69. / i; `* V: S+ _0 a# N4 m6 U
  70.                         case 'asf':  s& `" n3 p6 B* N" F5 @9 k7 P* q
  71.                         case 'asx':9 g6 s- y1 n( k* B  W
  72.                         case 'wmv':' D2 g. n4 F2 |9 t  B/ B
  73.                         case 'mms':
    9 L& }, _0 E: e3 s
  74.                         case 'avi':
    0 y( I9 {1 L. y
  75.                         case 'mpg':
    4 K/ c3 P& ^/ d6 V5 v% Q
  76.                         case 'mpeg':* n, _' y+ o" [# i
  77.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    ! a0 `# {) l7 L" ~

  78. ; T! Z* U0 q- @9 |; @: T+ g8 H
  79.                         case 'mov':
    4 {  u' t! e& b4 O" u. Y8 {) x; b
  80.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    % q: A8 H/ K9 U" O. W

  81. ( B, k5 M  a% `. r$ S
  82.                         default:! S* q. |& c* a
  83.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';  q7 [, y% u) v
  84.                 }
    3 b2 n- V( C5 D5 F6 h
  85.         }# U$ `$ O# }/ h3 Z+ b1 Z5 v) `
  86.         return;
    . b2 C; M; r) X; r: ^+ o$ ?2 ^7 j4 V4 a
  87. }
复制代码
这个世界只有10种人:一种是懂2进制的,另一种是不懂的。

【情系根子】〓 https://525247.net 〓

个人业余电台:BI7ILX   守候频率:1343212JJ08

管理员

论坛测试[砖]家

Rank: 12Rank: 12Rank: 12Rank: 12

金币
7316
贡献
615
威望
9151
最后登录
2026-8-24
帖子
1875
积分
25896
UID
10

论坛元老 网络高手 新人进步奖

5
发表于 2026-5-18 11:03:28 |只看该作者
原FLASH已死:
  1. function parseflash($w, $h, $url) {
    8 q5 c& R' y1 s  ~+ o
  2.         $w = !$w ? 550 : $w;# d: v- K! N5 H' |) p
  3.         $h = !$h ? 400 : $h;( Y9 G  W- k9 o' Z
  4.         preg_match("/((https?){1}:\/\/|www\.)[^\[\"']+/i", $url, $matches);
    0 ?; O  k0 v0 `! O
  5.         $url = $matches[0];
    + q. ~6 ]! e5 q( f+ W5 l1 o
  6.         $randomid = 'swf_'.random(3);
    # H2 N7 @/ X; ~
  7.         if(fileext($url) != 'flv') {/ v+ o) R% N% O
  8.                 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>';
    6 \1 B  a0 w% d' \1 A4 f
  9.         } else {
    . u- ~% y: f2 v
  10.                 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>';: I0 O- H( m% h' d7 g
  11.         }
    $ Q# \/ x6 @) v: E$ q
  12. }
复制代码
不得已的修改方案(让原来的播放器直接显示为FLASH链接):
  1. function parseflash($w, $h, $url) {4 i% K6 T( L* R5 O5 f2 U+ E
  2. return '<a href="'.$url.'" target="_blank" rel="noopener noreferrer">'.$url.'</a>';
    # |' ]! P4 C' f6 e
  3. }
复制代码
这个世界只有10种人:一种是懂2进制的,另一种是不懂的。

【情系根子】〓 https://525247.net 〓

个人业余电台:BI7ILX   守候频率:1343212JJ08

Rank: 1

金币
53
贡献
0
威望
2
最后登录
2026-6-9
帖子
1
积分
5
UID
3000
6
发表于 2026-6-9 20:41:31 |只看该作者
您需要登录后才可以回帖 登录 | 立即加入

Archiver|手机版|高州人深圳站

GMT+8, 2026-9-22 02:06 , Processed in 0.026442 second(s), 13 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部