【高州情】高州人深圳站

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

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

FLASH最终还是没能跟上时代的步伐,被各大浏览器抛弃,我们这老破旧论坛连头像也上传不了,花了一个星期反编译了Discuz7.2的FLASH头像上传逻辑,并把这套逻辑转移到了X2身上,
+ Y. @* U# s, T用同样的方法外挂了一个HTML5的插件去替代原来的FLASH,恢复了头像的上传,
" q1 H& a! ^& \) M( s2 y# e虽然界面上还有些粗糙,但起嘛能用了,如果各位发现头像上传有什么问题可以跟帖留言。

  w/ |% |& l5 N) o" _7 f! Q0 u
) R2 ~* L1 T; Q" l! ~

" p% z' z  q" m7 s[attach]14769[/attach]
1 W! ~5 S8 C, s# X# u% y0 C% }4 {$ y/ P( L1 {. X5 k) ^
Discuz X2 HTML5 头像插件 v1.0  2026-05-05
3 d( e. S" U$ P7 z* T==============================6 \5 T: {5 N. z2 E
【目录结构】1 F' q7 d, Z% z9 h) K" S# ~
upload/
( y5 V5 U4 {& Q# ]├── html5avatar.php        插件后端接口(核心逻辑)
+ }7 b- D& S+ n1 Y└── template/3 B" X- v+ S0 t( N
        └─ default/$ p6 P( `$ C/ P6 m' x9 \1 O1 L# _
            └─ home/
) \2 @4 D" ^  M6 }                └─ spacecp_avatar.htm        前端模板(含 Cropper.js)  C$ M; B& w% j; Z+ X$ _
. R/ r. r% e! q* V; I3 b7 i  K0 K
【适用环境】
9 r# G  l# P# j! r" M- Discuz! X2 UTF-8" b' k6 i$ U3 I# K  j* p* Y. J
- UCenter 1.6
; Y6 }0 C  ~$ [9 b# d- PHP 5.6+2 [* w" h2 m9 h) A/ m9 T

* ]! J* z. Q+ x3 x( X【安装方法】9 O8 T; k* z8 a
1. 将 upload 目录下的文件,按路径覆盖到你网站根目录3 _0 N$ e7 |% Y; G" [
  O. t0 z) V* ]! {
2. 特别注意:
0 e+ }; p9 ?2 v" t   本修改仅限使用默认模板,路径为:/templates/default/home/spacecp_avatar.htm
0 B1 O4 N, h, D0 [# V   (如果你使用了其它模板,请自行替换文件标注部分代码。): Y1 V. ~% p# a( Y, B. T
7 P2 i5 s; V: w* ~" E9 O
3. 确保目录权限:2 \2 Y/ f7 R2 i! S
   chmod -R 755 uc_server/data/avatar
# m( k5 v6 ]: a$ J. o* h
6 f3 o7 Q6 @% K5 O" x( v4. 进入:
/ `) v, i9 A: }* w8 X1 @" L   点头像进入 →个人空间 → 编辑头像3 I* P0 w, }! o1 E$ U
   即可使用 HTML5 上传' f* @+ h& ~! l8 [5 {
8 L0 C6 |/ y0 n4 u" F
【说明】- ]) z) B! v/ k4 Y
- 会直接替换 Flash 头像入口
: O* }& {8 m! s- 无需安装、无需后台开启
+ p, f" J: w+ h5 X- 不影响 UCenter 原有逻辑: s2 F8 L; b8 T) J
- 保留头像简单裁剪功能(Cropper.js)& [' h# v/ O8 d8 @+ p
- 仅新增一个htnl5上传组件

$ s! K$ q1 F; Q0 H+ o2 R7 U! d6 t2 N7 m+ r2 q3 Z/ A" s: A

作者: 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) {
    8 x" }! ?7 S0 D4 w
  2.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));9 u& ~$ t, k  v6 l8 l& k3 e
  3.         switch($ext) {& {# A" W6 l6 W2 j  j
  4.                 case 'mp3':' p; w( c/ B) r9 c- M& Q+ I- P
  5.                 case 'wma':
    1 m9 N- f) h( u
  6.                 case 'mid':
    9 @. K7 O" K7 t4 G& x
  7.                 case 'wav':
    2 E, L3 _# n$ `9 S& H* b( @+ f
  8.                         return '<object classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" ...>';4 K) A( t  a3 `0 Z
  9.                 case 'ra':
    2 ]+ r& \- N4 m/ [6 `( a
  10.                 case 'rm':
    " Z  e( B, S7 l. Q) n8 s( ]
  11.                 case 'ram':+ i/ N3 E/ i- S  z, @, O
  12.                         return '<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" ...>';
    * l1 C, R3 k/ }9 i: W% D
  13.         }! {+ p5 p, M/ Q2 X( ?; E; |
  14. }& o$ b9 O  p7 i) m+ U7 J

  15. 9 _/ K* u* W. B8 h$ l5 d' f
  16. function parsemedia($params, $url) {
    ) S& Z/ {& K) }. }* x6 s6 J8 L9 K
  17.         ...  E. [4 z: p2 {! g% y% v5 A5 d
  18.         return parseaudio($url, $width);: F5 n: U* k2 u
  19. }
复制代码
新的 HTML5 播放控件:
  1. // 替换原代码为 HTML5 播放控件6 P  {5 F, M! z
  2. function parseaudio($url, $width = 400) {1 [/ M1 L8 B% x# o
  3.         $url = str_replace('\\"', '"', $url);
    # C( F; m! C1 l/ N, d
  4.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));
    0 z0 ?- v0 A5 G5 J( V, |* \

  5. % k" i$ j% S4 a
  6.         switch($ext) {
    ! f/ @& R! f  C3 q) H2 T9 |
  7.                 case 'mp3':
    5 Z# `: K+ U6 O9 i; f( G
  8.                 case 'wma':+ w/ U' ^8 Z. K! \3 J4 a% K% R
  9.                 case 'wav':4 q: S& [6 y9 v
  10.                 case 'mid':
    0 P! T, L3 s" n( a6 v+ }$ K
  11.                 case 'ogg':
    * e) I2 p. V5 i5 M' K. z
  12.                         return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:2px;" src="'.$url.'"> </audio>';
    0 x' ?" K8 @+ _- i1 |
  13.                 case 'ra':2 c% p' x1 I, \( P6 b
  14.                 case 'rm':5 R0 P& w( C7 `' @
  15.                 case 'ram':
    - E% m) R; ]- q3 H1 m6 G" m0 s% F
  16.                         // RM 无法 HTML5 播放,退化为链接
    6 k* |9 i( e$ F: Z5 m# h3 n- k
  17.                         return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    4 q& `) ~8 b) r3 N" l) \; l
  18.         }
    ' j  _1 L* h  r1 q0 r2 ?
  19. }  |( `) o, E4 b7 A* a6 B3 ?
  20. 3 [/ Y, j! ?3 I& E5 ^4 w1 t$ w
  21. function parsemedia($params, $url) {
    1 s3 `2 x- o5 l  `4 v. l9 [
  22. $ `" h; m+ J9 s) |/ c9 U0 @
  23.         $params = explode(',', $params);
    9 J+ n" B3 j: ]8 B3 g' Z
  24. * }- p9 K$ C0 P+ ?4 w
  25.         $width  = isset($params[1]) && intval($params[1]) ? intval($params[1]) : 400;
    1 M- y6 d% d$ x3 Q2 Q! s" W( P
  26.         $height = isset($params[2]) && intval($params[2]) ? intval($params[2]) : 300;% o- C& w; Z, \% c
  27. . i& `# U2 c$ K# @4 k; I, r3 b$ H
  28.         $width  = min($width, 800);
    " k( d7 {& x8 b) n" B
  29.         $height = min($height, 600);( B1 q" q+ v$ h+ W! \, h

  30. & u) e8 k; H+ ]7 F1 Q
  31.         $url = str_replace(array('<', '>'), '', str_replace('\\"', '"', $url));
    3 @( b5 y8 ~1 r  F% q! R5 r6 ]+ C+ w) e
  32.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));7 Y5 E4 d* s" `. T

  33. . U  [; B. I3 H0 O5 ]
  34.         /* HTML5 优先(现代浏览器) */
    ( ~+ u0 }! q2 I( N4 M9 ^' ]" [
  35.         if(in_array($ext, array('mp3','wav','ogg'))) {
    & ?2 c" x3 T, M9 @
  36.                 return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:6px;">! Z, R1 ~, ?* ^1 C  r$ j
  37.                                         <source src="'.$url.'" type="audio/mpeg">
    - ^* g, ^  d+ b2 f
  38.                                 </audio>';
    1 ]2 z# X- H' w1 h- t8 O& O' ~- R
  39.         }+ o$ v9 _6 M& T3 _" s$ j

  40. ) ^2 m1 y. l! W- z- N
  41.         if(in_array($ext, array('mp4','webm','ogg'))) {
    8 t% y8 F/ t& ?% {
  42.                 return '<video controls style="width:100%;max-width:'.$width.'px;border-radius:6px;"
    % Y6 ?! M4 R5 `0 ~+ T0 f
  43.                                          poster="">
    : H5 c& B" S2 X- ^$ O9 l
  44.                                         <source src="'.$url.'" type="video/mp4">; w8 F: O/ h% t. g
  45.                                 </video>';4 {# H! S  p8 m+ N2 t6 b6 d. v
  46.         }
    ! g" h  z( o/ f: S: F
  47. : J$ j& P' b: ?9 _
  48.         /* Flash 逻辑保留(但不指望能用) */- Y0 \6 O' \. S9 ]
  49.         if(in_array(count($params), array(3, 4))) {+ h0 E5 [$ ]1 s# x2 d5 c& m; R
  50.                 $type = $params[0];) l6 x& C2 W9 ~* C
  51. # H6 o% _- _1 ?- N4 _1 l
  52.                 switch($type) {  K$ t; i" o# U5 I4 U+ b
  53.                         case 'mp3':1 w( `4 P6 u; o7 G, B8 @  B
  54.                         case 'wma':
      P2 R1 l/ \7 L! _
  55.                         case 'ra':
    9 E% j- k  B% X% \1 p5 Z
  56.                         case 'ram':5 m. y( m  ^7 c( ]! O, \
  57.                         case 'wav':
    5 ^5 [; M" A0 F* q1 s: d
  58.                         case 'mid':
    ) S. W1 l( R( N3 N; j9 ?: {/ W3 G
  59.                                 return parseaudio($url, $width);  R1 [6 n- K# }
  60.   ?- y2 u4 y6 g0 z: F2 Q
  61.                         case 'rm':( E" J/ M7 r6 D8 `- ]! G, W3 ^
  62.                         case 'rmvb':
    2 e4 g- ^* p8 x9 \& {
  63.                         case 'rtsp':% U# E. G6 o6 t/ N8 a, l
  64.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';3 _$ K9 b$ H! s1 [$ h% c

  65. 6 f0 n; V' M* t, ~" S( k
  66.                         case 'flv':/ y' B, U: O+ e) e8 T( w& R
  67.                         case 'swf':& V  T" V9 C" ?% v; M4 A7 S5 B
  68.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    6 t& O. p7 K8 ~

  69. % H+ I* w9 f5 ]' u2 {! u
  70.                         case 'asf':/ C8 v; P! x7 u, [3 B
  71.                         case 'asx':: U2 M( x. P5 V# F1 R
  72.                         case 'wmv':
    3 z2 X6 A5 S! n4 X! c) {# ^" S
  73.                         case 'mms':
    # N3 x# E! n# b
  74.                         case 'avi':5 j, R* K) {- l8 O8 X/ g
  75.                         case 'mpg':
    0 x: e6 R( |( Y& r6 t- {
  76.                         case 'mpeg':# a1 z, z) M) n6 W) o
  77.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    5 _8 P+ O% R( m  M( P5 y
  78. . {/ l3 p  F0 a1 z  x2 p2 n  V
  79.                         case 'mov':
    - F% O% g" U, A2 h
  80.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';$ L6 U0 _9 a! |& \  @7 ]: w/ ]3 G6 U

  81. 6 Y3 H( `' y! N/ j6 P0 }2 c' N
  82.                         default:
    & M1 Q9 y. v3 r- Q5 _0 J+ W
  83.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';" A4 M5 q0 @' P+ p1 m8 U
  84.                 }; ^# `' f9 S( f) W4 O
  85.         }: N7 h$ y  V6 u! Q4 l- z
  86.         return;
    2 U$ y2 }2 H! m1 N
  87. }
复制代码

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

原FLASH已死:
  1. function parseflash($w, $h, $url) {& o1 N) |/ l+ [" d" q0 [, v$ r
  2.         $w = !$w ? 550 : $w;* t) l: [, o+ A5 v
  3.         $h = !$h ? 400 : $h;+ Z- J; W3 h3 s5 }9 e
  4.         preg_match("/((https?){1}:\/\/|www\.)[^\[\"']+/i", $url, $matches);
    7 \0 w5 y8 ^$ O% n
  5.         $url = $matches[0];5 B6 J- d# S$ ?- j, u+ |0 ^
  6.         $randomid = 'swf_'.random(3);
    , N4 b' z7 p/ b
  7.         if(fileext($url) != 'flv') {
    $ P8 _3 _- ^1 f0 R$ G4 Y
  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>';
      [; r) }0 F! s1 j2 g5 Z( `
  9.         } else {" ]4 \" t' H3 I: Y, K4 R
  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>';
    : i  N) _/ W! _2 S( ]0 y# k4 _
  11.         }; L- T+ x1 b$ m3 [- w
  12. }
复制代码
不得已的修改方案(让原来的播放器直接显示为FLASH链接):
  1. function parseflash($w, $h, $url) {! O; ]# F/ p) V  Y
  2. return '<a href="'.$url.'" target="_blank" rel="noopener noreferrer">'.$url.'</a>';9 [, |0 t7 Y( B, d9 w/ h
  3. }
复制代码

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






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