【高州情】高州人深圳站

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

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

FLASH最终还是没能跟上时代的步伐,被各大浏览器抛弃,我们这老破旧论坛连头像也上传不了,花了一个星期反编译了Discuz7.2的FLASH头像上传逻辑,并把这套逻辑转移到了X2身上,# i6 O4 k) l# H- s' w
用同样的方法外挂了一个HTML5的插件去替代原来的FLASH,恢复了头像的上传,
% G4 r3 {* j5 f- d& H+ n) r虽然界面上还有些粗糙,但起嘛能用了,如果各位发现头像上传有什么问题可以跟帖留言。

* E. `; O  p' c  P- e5 |( @% |+ F% }
6 ?8 w! ]1 {: [
[attach]14769[/attach]
, S5 ]5 S  t; ]/ T2 j. V
2 q3 a3 V3 e4 y% H% c. |
Discuz X2 HTML5 头像插件 v1.0  2026-05-05& k% F2 F7 P" E
==============================
7 q' R; H' }/ h( B3 A, q; L8 e. l【目录结构】
. _, }3 n) B, }/ R" P* |upload/1 ~( n4 [1 p0 j0 e9 u: o
├── html5avatar.php        插件后端接口(核心逻辑)
& s, P/ Z4 f9 {2 Y" F! v: j└── template/. W! `3 F3 D) h
        └─ default/
; J+ M. c' z, M7 [            └─ home/
+ V6 T# p. v! ^$ x6 t3 }                └─ spacecp_avatar.htm        前端模板(含 Cropper.js)
- R3 L' d0 F$ t8 \8 r
2 ^/ t8 N" _* B% c- w( Z【适用环境】) _9 H; `9 H$ |5 v
- Discuz! X2 UTF-8: \3 d" X. k9 e& M8 R4 T1 T
- UCenter 1.6
+ N. Z% k2 p& H8 g) j. i- PHP 5.6+" v; T9 B: H; T
# P2 ~  c3 T. O9 I
【安装方法】
2 b: n$ f0 L2 I1. 将 upload 目录下的文件,按路径覆盖到你网站根目录
1 f5 y1 f7 R8 U- ]' z' F9 ]4 [3 b  o! h/ J7 E( S2 Z
2. 特别注意:0 q8 I  P2 q! d
   本修改仅限使用默认模板,路径为:/templates/default/home/spacecp_avatar.htm
6 y% A' ^' S0 \" w  }1 h+ X% W1 V   (如果你使用了其它模板,请自行替换文件标注部分代码。)
# Q/ F/ Y' s2 Q: |# b0 O& T7 O" w1 S& t7 A
3. 确保目录权限:
9 t; N) Z$ i5 J; G: w8 q9 _   chmod -R 755 uc_server/data/avatar
" d, `; V* B) S: ?& [; _0 m( w* G# L7 Z" h
4. 进入:4 O9 B% y& B6 S0 O+ O
   点头像进入 →个人空间 → 编辑头像2 I( S$ y+ G; C& r
   即可使用 HTML5 上传
; M& I8 e6 K6 {. a$ O# o$ D: I5 O# S: M' x# X3 R1 k
【说明】& H* W* Z1 j9 V2 Y5 A
- 会直接替换 Flash 头像入口
+ \7 ]$ p3 d/ H4 ^1 o* [* [1 J- 无需安装、无需后台开启7 M5 p! e7 d; ?8 ~4 Y
- 不影响 UCenter 原有逻辑
3 ]1 Y: {( g3 E  t; [1 Y: \- 保留头像简单裁剪功能(Cropper.js)
. z( D, A+ Q' A" [- 仅新增一个htnl5上传组件
, l: x: V5 ]2 |" h! Y8 B' t: X

2 q- W6 H# H1 |8 S+ \" |& H# L+ E0 _
作者: 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) {
    ( u. d: Q% e% G9 i
  2.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));
    3 P0 a4 D& k* s2 ]6 U" ^
  3.         switch($ext) {' m9 E. O+ n+ s( G
  4.                 case 'mp3':9 z4 h( F9 h/ W5 t8 Y& h
  5.                 case 'wma':
    ; @; h5 u  A3 p- e
  6.                 case 'mid':
    , Y$ _7 z$ b* k9 s- y
  7.                 case 'wav':* ]( _) g0 J5 w8 P' f1 c# b* E: W5 C
  8.                         return '<object classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" ...>';7 R7 e4 b& G- p! H, ^+ }1 T+ [: O
  9.                 case 'ra':) L; m. p8 E* l. x! a! ?1 |5 |
  10.                 case 'rm':
    , Z' A! C3 ~; D3 Y$ `" E
  11.                 case 'ram':8 c  e" }, R8 `% P2 @
  12.                         return '<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" ...>';% K9 k, {- F& @( ?* L+ I
  13.         }: Y& Y# \9 M, `2 P! x6 p. h
  14. }8 ?' q- j& |: c" w0 {$ f$ s0 x
  15. 0 s$ l) q$ ?9 l1 E- I! |9 e: Y
  16. function parsemedia($params, $url) {
    & q; \. m: l% r2 ]
  17.         .../ |4 m1 [; ]2 i- L' ]% l
  18.         return parseaudio($url, $width);
    8 x2 c- E# n& e, a
  19. }
复制代码
新的 HTML5 播放控件:
  1. // 替换原代码为 HTML5 播放控件5 f5 k* X! t5 q/ {. U# y
  2. function parseaudio($url, $width = 400) {0 y; R% Q2 L1 _6 P& p6 Y' e
  3.         $url = str_replace('\\"', '"', $url);
    / K( G1 i; H6 f3 B  M
  4.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));
    ! A3 J$ R- c1 n6 I4 g5 ?
  5. $ ^7 E. j" d0 M  S0 [1 x$ x4 y( @
  6.         switch($ext) {
    - u" l5 s! o1 y' `7 F' U( K' q
  7.                 case 'mp3':# I* a7 @% V) U6 x8 s  q
  8.                 case 'wma':
    & A% [) c9 Y/ @( Z* z  V
  9.                 case 'wav':
    % o: n+ @3 L, j) B
  10.                 case 'mid':- J5 H4 G3 h) }6 b; }4 l) g9 Y; O
  11.                 case 'ogg':0 S+ _' Q- ]8 f& V% ^4 [
  12.                         return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:2px;" src="'.$url.'"> </audio>';
    # s5 N3 E& f% Y2 Q2 N& H
  13.                 case 'ra':
    ' m8 R5 M2 B: a, S+ B
  14.                 case 'rm':* s' n/ q4 i4 K; y& C3 D
  15.                 case 'ram':
    : c" y& B" f( i, F
  16.                         // RM 无法 HTML5 播放,退化为链接
      _, T9 K- z5 s/ J
  17.                         return '<a href="'.$url.'" target="_blank">'.$url.'</a>';9 m2 N! _) i+ E" g/ p4 o' t
  18.         }
    * V. n, |( T9 a! J3 K: X# x
  19. }' G, C6 a: [" x% e$ o' u  D  {
  20. ) D) e8 X/ e' ^- ^5 G' J
  21. function parsemedia($params, $url) {
    9 {. M; _0 E# ?! A. H
  22.   }" {4 J7 A( \- b6 J- s
  23.         $params = explode(',', $params);6 L( H5 s0 A) A) \% B

  24. % d; _1 f! Q0 r) }, W; d
  25.         $width  = isset($params[1]) && intval($params[1]) ? intval($params[1]) : 400;
      t6 G+ `3 z: ~: d6 {% W
  26.         $height = isset($params[2]) && intval($params[2]) ? intval($params[2]) : 300;
    $ m, Z; X+ |- a& ~* g& a) M) ?
  27. / @. P0 @5 e* l* ]( |
  28.         $width  = min($width, 800);, r7 k5 q7 L& u, D7 q8 s
  29.         $height = min($height, 600);) E" I$ r& H, c6 F

  30. 1 X* c  c. v/ M/ C# {
  31.         $url = str_replace(array('<', '>'), '', str_replace('\\"', '"', $url));* f( [& o) ~7 z+ z9 K
  32.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));, ?- |. Z8 }! Q' F& G3 }

  33. 9 d2 j4 H4 [3 G: D7 I; Q4 u. S
  34.         /* HTML5 优先(现代浏览器) */( D+ P% ?2 Z+ v
  35.         if(in_array($ext, array('mp3','wav','ogg'))) {
    % z5 S% W( R  S4 X5 p
  36.                 return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:6px;">1 m* f, p' f7 s1 x4 f- }/ K
  37.                                         <source src="'.$url.'" type="audio/mpeg">
    - H1 ]. ^) @+ ?. g
  38.                                 </audio>';
    6 G: R4 l' t/ d. R% {
  39.         }
    ! u' J& ^& o7 Y, d1 a

  40. , J' j- ^( Q; b9 }# y5 R2 W
  41.         if(in_array($ext, array('mp4','webm','ogg'))) {$ J$ d+ Z: s0 s3 C9 W
  42.                 return '<video controls style="width:100%;max-width:'.$width.'px;border-radius:6px;"* f; g0 M7 x) {* p3 o. t# Q3 z
  43.                                          poster="">  g) H& T7 a1 G/ }% y3 Q' @
  44.                                         <source src="'.$url.'" type="video/mp4">
    ! D2 J. z% X; S& C8 x3 P$ S% v
  45.                                 </video>';6 E( z1 k6 y) q6 y' ?( S" u+ r
  46.         }
    8 `4 d8 L4 U# n% E, D, j
  47. " g9 N) O4 C( j& \( x& S, J2 y
  48.         /* Flash 逻辑保留(但不指望能用) */& {& l/ }3 e. U; Q7 m, X+ L' B
  49.         if(in_array(count($params), array(3, 4))) {
    : J  z3 B$ l7 N6 j$ N# F
  50.                 $type = $params[0];
    5 u( q' x6 D; F$ }, Y# b9 P

  51. & N3 \4 }8 g" P: z8 [- T  T1 A! A
  52.                 switch($type) {" B+ r' L' ?! x0 u" a( O3 q
  53.                         case 'mp3':
    5 V8 g; j! n7 N9 Q
  54.                         case 'wma':
    3 @, t& V, z* p) }7 L+ a* W8 R
  55.                         case 'ra':' j  G1 H! G( ^9 I
  56.                         case 'ram':
    0 n3 T1 U) y) i! B6 X- L9 b& ?# ^3 \9 T
  57.                         case 'wav':
    7 j2 a6 B) B9 z) |3 N) {; P/ W# s# t
  58.                         case 'mid':
    - F& B: ^. ^2 C, y
  59.                                 return parseaudio($url, $width);
    & _+ k+ i2 X) s) O( _. S$ v
  60. 1 B( z' D2 F$ Y! f  D* L
  61.                         case 'rm':
    . S4 L. B, P5 K7 o/ }
  62.                         case 'rmvb':
    5 Z  h7 R$ v% `
  63.                         case 'rtsp':7 a6 B8 y1 m2 r' E/ m: }+ ]
  64.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    8 h! k0 P& E  R+ ^
  65. 7 L8 R! a7 F/ a( p+ \3 D
  66.                         case 'flv':
    4 G- ^7 [" b5 l2 _9 X3 U1 F
  67.                         case 'swf':
    * \- y/ M9 W7 }" q
  68.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    5 Z5 l% Z9 \2 l

  69. ( z' m/ T) J. \* h0 r( q$ E9 d
  70.                         case 'asf':  _9 c) X. x$ M  B& U$ k
  71.                         case 'asx':( i* I* _3 q. o1 Q: \- L/ W
  72.                         case 'wmv':; k+ a) O* k) F; g' S
  73.                         case 'mms':
    3 H% `' F* V8 R. `* Z
  74.                         case 'avi':" C$ V9 k0 ?: G9 m
  75.                         case 'mpg':
    ) B3 |& ?! ?- M
  76.                         case 'mpeg':1 Q; a" P; O/ I. R* v
  77.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';% e, C% x8 I/ X5 i$ D  c: p: W

  78. ( w. Z5 O3 B( n% j! Z4 G
  79.                         case 'mov':, K+ b& O' C) n$ o
  80.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';+ ^7 L4 E9 s0 R4 A

  81. 8 o4 A( R- B! H/ m
  82.                         default:  B. h3 R, P9 |/ x
  83.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';9 M( @  `+ P1 w2 t& q2 r
  84.                 }
    $ L9 L8 D$ ^+ C! X- S* |
  85.         }( p& X* O5 }7 O7 `& W, Q2 P
  86.         return;9 v/ h0 Y3 r1 m1 O- P: |6 t
  87. }
复制代码

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

原FLASH已死:
  1. function parseflash($w, $h, $url) {0 T3 R4 t% G6 v* N3 }' L
  2.         $w = !$w ? 550 : $w;& H$ B; H0 e2 l
  3.         $h = !$h ? 400 : $h;9 j6 P1 n( h+ H0 ~7 M7 D( S! B0 s
  4.         preg_match("/((https?){1}:\/\/|www\.)[^\[\"']+/i", $url, $matches);
    ; O; a7 f. d6 r  x3 y; f
  5.         $url = $matches[0];0 a4 `0 V& {. _3 B+ E
  6.         $randomid = 'swf_'.random(3);
    ! R% ]3 W3 {4 e
  7.         if(fileext($url) != 'flv') {% y# M9 k( ?% Z$ k/ A1 i1 d) J
  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>';2 M; u+ C- W% N  K2 r% {6 m. ?# x
  9.         } else {) y3 Y  g. q& w1 s
  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>';
    ! a4 _/ C2 `; p8 |$ W
  11.         }
    / l5 v# J5 X4 |! {
  12. }
复制代码
不得已的修改方案(让原来的播放器直接显示为FLASH链接):
  1. function parseflash($w, $h, $url) {
    & Y7 b- L) X; s, D+ l& f) T
  2. return '<a href="'.$url.'" target="_blank" rel="noopener noreferrer">'.$url.'</a>';" p8 O6 z; d' U" s0 N$ E
  3. }
复制代码

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






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