【高州情】高州人深圳站

标题: 由于各大浏览器都不支持FLASH,外挂了HTML5组件实现头像上传 [打印本页]

作者: 浪浪    时间: 2026-5-10 21:51:51     标题: 由于各大浏览器都不支持FLASH,外挂了HTML5组件实现头像上传

FLASH最终还是没能跟上时代的步伐,被各大浏览器抛弃,我们这老破旧论坛连头像也上传不了,花了一个星期反编译了Discuz7.2的FLASH头像上传逻辑,并把这套逻辑转移到了X2身上,8 E7 O+ E) F9 A7 p
用同样的方法外挂了一个HTML5的插件去替代原来的FLASH,恢复了头像的上传,
. [4 x" h. E8 E9 C: `虽然界面上还有些粗糙,但起嘛能用了,如果各位发现头像上传有什么问题可以跟帖留言。

! L0 R- B+ {$ ^' y2 x2 P- u6 Z. s9 J9 t
1 R8 n  T1 t4 a1 M; c; D
[attach]14769[/attach]
: W+ B2 w6 n( P$ B5 i. |% K' }, I- b5 q9 [3 x) B. a
Discuz X2 HTML5 头像插件 v1.0  2026-05-05! t3 W6 F* A; z. e2 {( n" S
==============================
$ L3 t) S1 A# E& p: B: v【目录结构】
  M% W$ A8 i( W! O8 yupload/
' c& F# J3 D# A" y2 M2 ^├── html5avatar.php        插件后端接口(核心逻辑)
: N# Y1 l$ F  Z. m└── template/
+ i( d/ s$ b9 g        └─ default/
, ~  i7 j0 }3 [8 y8 W( r            └─ home/
% x1 K  S9 n" u/ Y3 G; B4 u                └─ spacecp_avatar.htm        前端模板(含 Cropper.js)3 _+ l* P; H5 c7 P, q
6 h/ r6 a$ l" r9 o' h$ _
【适用环境】1 u6 p; D+ D6 a6 U
- Discuz! X2 UTF-8) [, t% s" b" m& v4 {+ L
- UCenter 1.6
# C* K/ X4 m0 z3 A' H* ^- PHP 5.6+
: ~/ q4 r7 I4 T6 b7 U. o" o& a* T" K( o) P
【安装方法】
! l: F$ l! Y# r: l5 F' |  C1. 将 upload 目录下的文件,按路径覆盖到你网站根目录
% d: G0 ?) X, V$ `9 z! N' c+ N& ^. Y' Y4 H% ~5 x5 e4 T
2. 特别注意:
9 n  i1 d, p/ _  M   本修改仅限使用默认模板,路径为:/templates/default/home/spacecp_avatar.htm
3 I( r+ B2 }  r* }3 x* O   (如果你使用了其它模板,请自行替换文件标注部分代码。), k; F/ t! D$ L/ h. @( b

4 t6 u2 }: n8 Z2 {3 s" ]+ S+ J3. 确保目录权限:
4 x; N6 {7 v5 t7 k) Q1 b9 n   chmod -R 755 uc_server/data/avatar
4 }6 \, Y$ g. ]* i) q0 f% ]+ F) j  y5 S4 V, b( C+ ^: Q. B: K* s" n! }; b. h
4. 进入:- p) t% W' A' z, ?9 g8 G" K
   点头像进入 →个人空间 → 编辑头像- ~( i4 ]) L6 {5 i" a& v
   即可使用 HTML5 上传
* x. F. \. S; J; a& e6 g; d( V8 t7 l5 _
【说明】
' L& e' L7 i6 v2 _/ k0 }. r1 K- 会直接替换 Flash 头像入口
& |0 ~6 p1 q) `3 `6 @; _- 无需安装、无需后台开启
7 ^. R- h9 n( K# B: t  l+ I- 不影响 UCenter 原有逻辑
9 e: D/ U$ j, }' }  W- 保留头像简单裁剪功能(Cropper.js)4 s3 A% t- B$ S3 }9 d, [, |) L3 e
- 仅新增一个htnl5上传组件
/ `1 ~. f/ I  B1 q: ~+ d

) K, u- P. I6 H9 y. b. p8 Q, d* Q0 b
作者: Longe    时间: 2026-5-10 22:58:22

打包收藏放这,免得老人痴呆
作者: yupopp    时间: 2026-5-11 16:59:46


作者: Longe    时间: 2026-5-18 10:25:41     标题: 修复多媒体控件:把原来多媒体的FLASH控件替换为HTML5原生多媒体控件

原多媒体控件:
  1. function parseaudio($url, $width = 400) {  T2 Q( }: n' G+ Z
  2.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));7 |. F0 V. b: y/ G9 D
  3.         switch($ext) {4 Q- b# y' `3 |6 F5 T% ~% d
  4.                 case 'mp3':
    7 K& @+ _1 ^6 p2 ]/ V0 o3 K$ {
  5.                 case 'wma':2 V  j$ \8 [4 k& R1 A' S$ F
  6.                 case 'mid':: ?- T8 s; C- Y- R+ U
  7.                 case 'wav':
    # }. S! `% L# ^/ V- ~5 G3 G; p
  8.                         return '<object classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" ...>';+ A' ~( s$ L& {" T- r  \1 B
  9.                 case 'ra':5 L. B3 r& W5 g* G
  10.                 case 'rm':& t+ n  o: K$ d5 y+ N% l7 l
  11.                 case 'ram':* f) }% R" w2 d% v
  12.                         return '<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" ...>';8 m. J: j  \" B5 j) B
  13.         }2 c  j. j+ T/ ?4 {5 U; q+ _
  14. }2 y5 G& H. |. u/ L3 k: ?+ X

  15. , |( H" z! j- s
  16. function parsemedia($params, $url) {$ y) ?% V# \! |9 U3 J6 q/ A
  17.         ...
    8 g% i) S1 [1 ]8 K3 N, G, |
  18.         return parseaudio($url, $width);
    1 S) @9 g; V$ W2 H; p( E7 b
  19. }
复制代码
新的 HTML5 播放控件:
  1. // 替换原代码为 HTML5 播放控件
    9 j6 _# Y/ v5 ~4 B$ Z
  2. function parseaudio($url, $width = 400) {
    / E; e, T( A* C* l5 }
  3.         $url = str_replace('\\"', '"', $url);# D- t7 s& q9 g+ C
  4.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));8 c% v; j) n7 y! A& `- L; ^! e% ?
  5. % q9 z+ H( a: R0 C  a5 l4 W
  6.         switch($ext) {
      y* W  S9 B, u
  7.                 case 'mp3':- u, S4 N9 {2 o* Y
  8.                 case 'wma':
    - K) Y0 o4 D( k$ Q
  9.                 case 'wav':
    / ^  t: g: S; J5 _* R
  10.                 case 'mid':. k0 _( |4 a" T9 f3 S& I% u
  11.                 case 'ogg':
    5 L/ P/ Y, {4 P8 K, H
  12.                         return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:2px;" src="'.$url.'"> </audio>';/ ?, D6 |: L  A+ Q' f% x2 K
  13.                 case 'ra':
    7 V8 U8 q; r) }! L
  14.                 case 'rm':2 R+ A1 Q* C9 D0 C6 ]/ ?8 q& K
  15.                 case 'ram':
    ! x$ }* j# u/ P; i. d
  16.                         // RM 无法 HTML5 播放,退化为链接) @( b! e- E1 A/ R7 ?4 k, ?1 e& J
  17.                         return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    0 {. z6 U: q5 l+ f5 M, Z
  18.         }. o( X! ?+ }. n: C# \7 X2 h
  19. }% _1 \4 P" `# @3 p5 L

  20. ( a$ |8 T& t" f$ z
  21. function parsemedia($params, $url) {! Z* S9 }) }% t4 {/ B

  22. ) [& w% k+ B9 d& q
  23.         $params = explode(',', $params);3 N, d3 f. g4 }- }* I1 |  H
  24. % V; I' J9 H- a8 g, r; ~
  25.         $width  = isset($params[1]) && intval($params[1]) ? intval($params[1]) : 400;
    3 `0 b" P: U! n" a4 E7 U& Q- Z
  26.         $height = isset($params[2]) && intval($params[2]) ? intval($params[2]) : 300;
    " T. y; i8 K& a" i3 \  w/ Q& s

  27. 1 }2 U# K4 h$ w
  28.         $width  = min($width, 800);
    9 n  @9 |' T% G/ ?
  29.         $height = min($height, 600);+ Z/ M: v7 K1 `* f7 F0 _9 B
  30. ) g+ @3 p$ t4 i: n8 \& q" d
  31.         $url = str_replace(array('<', '>'), '', str_replace('\\"', '"', $url));
    3 \. J. W: K0 v: l! G( m, |
  32.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));
    . g5 y3 y: ?, o' W

  33. 6 ^/ _, O2 }' {+ u" Z
  34.         /* HTML5 优先(现代浏览器) */* U: c) C# D2 P
  35.         if(in_array($ext, array('mp3','wav','ogg'))) {& F9 P% O6 D# G) [, v5 i" T& h, _! B
  36.                 return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:6px;">
    # i( Y* M+ K, m+ B2 O, I6 x
  37.                                         <source src="'.$url.'" type="audio/mpeg">- i7 \+ t/ a3 y/ e% n0 O
  38.                                 </audio>';
    , M9 o! I- A( j8 K+ h
  39.         }0 T" I, k. N) Y/ y
  40. 7 R5 n3 W: N  G# |" R
  41.         if(in_array($ext, array('mp4','webm','ogg'))) {
    1 p; C$ I. [2 w9 Z# \2 u8 h: p
  42.                 return '<video controls style="width:100%;max-width:'.$width.'px;border-radius:6px;"' X& b% E+ t) ~2 G/ _% J
  43.                                          poster="">; Q9 b0 H- Q4 e3 q0 x" g
  44.                                         <source src="'.$url.'" type="video/mp4">
    8 C/ h- R1 C: c+ Z& d7 F) B* e, q; J
  45.                                 </video>';5 d: H/ s8 _+ J' _5 C
  46.         }
    1 ]. e' n' w5 j
  47. ) G: l! q0 U. W' z8 r
  48.         /* Flash 逻辑保留(但不指望能用) */& \8 x8 F7 q' z
  49.         if(in_array(count($params), array(3, 4))) {0 u3 z) t* I1 L
  50.                 $type = $params[0];
    1 I. w4 E2 u/ U9 l- Y$ k6 m

  51. 9 u" B# o  x* U/ U! ]/ z) H+ Y; P, ]
  52.                 switch($type) {
    - x% h# T& O- {5 s, \- R2 \
  53.                         case 'mp3':
    $ }2 m3 j$ A- h% u" G0 q
  54.                         case 'wma':
    . V& n, G4 F2 f2 q, V5 F4 _' P
  55.                         case 'ra':
    , S7 J  {% e, c; R8 B$ G8 E
  56.                         case 'ram':
    ) B, D0 E) g0 S2 d! B
  57.                         case 'wav':
    ! T9 u. x+ @% j, O3 q/ E1 H# E  ~0 V
  58.                         case 'mid':% H9 X/ w; K: ~1 q
  59.                                 return parseaudio($url, $width);  _; P" A3 I% ~) D

  60. 5 [- R0 ?3 e4 o' V5 m  j& M
  61.                         case 'rm':
    & C: |# u- R1 y, @" j0 j/ ^
  62.                         case 'rmvb':
    0 d* }5 A6 l3 x7 C. T& D0 s9 c5 Q
  63.                         case 'rtsp':' Y" o) P( q  Y0 L
  64.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    8 P8 I+ ]# P' o6 i; `
  65. 5 F- K1 Y9 @6 u/ x3 T. F
  66.                         case 'flv':1 j3 U- @3 F6 u  L+ A& `7 {
  67.                         case 'swf':; Y  M& d- v7 m; I" T
  68.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';" A2 v# t! ?. g0 Y$ Q4 N, q
  69. 5 v  [/ }3 Z6 k
  70.                         case 'asf':
    ( p) M; v  o2 E. {$ K) m
  71.                         case 'asx':( N1 }. }- Q$ n+ H3 K$ ^
  72.                         case 'wmv':! ~( ~% d' g) g: C# F& T
  73.                         case 'mms':
    6 h6 w7 y* f$ S7 O
  74.                         case 'avi':; |/ `, Z' o2 ^2 P+ L6 \3 o$ r
  75.                         case 'mpg':
    ; f. @5 ?# n4 L! T- o+ {
  76.                         case 'mpeg':: Z& \  @) Q% Z6 U
  77.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';" b) ?& j4 E$ @) E
  78. % K) K  \8 K2 c% T: l9 b6 |6 Z9 Z2 R
  79.                         case 'mov':& U& H4 T( X9 n  W7 S' R
  80.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    ; |, s1 L6 H$ ]

  81. $ D$ e3 G! y/ w; l. o# b+ s
  82.                         default:4 V, Q4 ~9 t. f; h" ^# v5 v
  83.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';. w6 S; J  T5 D5 v( {4 I" e
  84.                 }! W& |- ~( J, i; \4 X
  85.         }2 f8 ^1 v- \* E" y4 ?8 p
  86.         return;/ R; X$ u, m2 q! C6 O/ n+ t+ C
  87. }
复制代码

作者: Longe    时间: 2026-5-18 11:03:28

原FLASH已死:
  1. function parseflash($w, $h, $url) {# V4 i7 k6 m$ U4 p" _
  2.         $w = !$w ? 550 : $w;- B+ S3 G5 V3 O9 L. ^3 I5 n
  3.         $h = !$h ? 400 : $h;+ x9 u0 `, g5 Z& Y2 v3 L9 j
  4.         preg_match("/((https?){1}:\/\/|www\.)[^\[\"']+/i", $url, $matches);* u* G0 E- M3 X# l
  5.         $url = $matches[0];, G3 E+ I: l! p+ ]
  6.         $randomid = 'swf_'.random(3);) s0 @* F6 {  ]% \' Y! s' O3 G
  7.         if(fileext($url) != 'flv') {) e4 [* a8 N4 _  a( a
  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>';
    8 L5 h9 ^% {+ B( @6 F) ]) P
  9.         } else {- ]. Q8 B% R/ K4 u; v7 T
  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>';- v4 v- A0 o0 k% m. C( f
  11.         }
    ! T: m3 A! x7 c0 B0 C4 \
  12. }
复制代码
不得已的修改方案(让原来的播放器直接显示为FLASH链接):
  1. function parseflash($w, $h, $url) {) j7 a0 O/ x8 C0 B1 X
  2. return '<a href="'.$url.'" target="_blank" rel="noopener noreferrer">'.$url.'</a>';
    9 S8 F" [8 [' L
  3. }
复制代码

作者: 哦si矛夹送    时间: 2026-6-9 20:41:31






欢迎光临 【高州情】高州人深圳站 (https://0668qq.cn/) Powered by Discuz! X2