【高州情】高州人深圳站

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

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

FLASH最终还是没能跟上时代的步伐,被各大浏览器抛弃,我们这老破旧论坛连头像也上传不了,花了一个星期反编译了Discuz7.2的FLASH头像上传逻辑,并把这套逻辑转移到了X2身上,
+ ~7 u5 A) w- y- c用同样的方法外挂了一个HTML5的插件去替代原来的FLASH,恢复了头像的上传,: V) b8 j, r3 b* a: i
虽然界面上还有些粗糙,但起嘛能用了,如果各位发现头像上传有什么问题可以跟帖留言。

& r4 r3 a4 U0 h7 q+ {! l$ a
! }+ D0 ~- U/ w' K+ U$ M( I! m; p
) L3 Z; H1 P4 h# l# B' j
[attach]14769[/attach]
& _, s% @8 k1 X0 p. I4 h. ^& a5 T5 E- H2 C" O( `
Discuz X2 HTML5 头像插件 v1.0  2026-05-053 n6 ?: [* w# a& |5 @; N
==============================
" ?& ?; C$ y. R/ V3 i8 g【目录结构】  n- W+ R4 k/ H; t/ I! _
upload/0 B  z' e* h) c
├── html5avatar.php        插件后端接口(核心逻辑)
$ _% b- Z( G# t  O+ M└── template/
' A* b) G& r; E: f& r' n! l' i        └─ default/, K% x4 V7 L9 R7 X2 Q- c( p
            └─ home/5 Y6 y( r- T; D
                └─ spacecp_avatar.htm        前端模板(含 Cropper.js)6 Y% H5 T: E' `% R6 G+ K* I

7 J! K4 q: _) |. i【适用环境】2 b# I4 ?9 E8 L" O4 o. L  M  n
- Discuz! X2 UTF-8
+ ?- O% @6 v: ~9 c$ g; ~2 ]- UCenter 1.6
* i7 c/ k  }1 M6 X! C8 l% b+ j/ r7 V- PHP 5.6+  }% {% Y3 Q; ]2 Q# P0 e" e

0 c6 Y# \- H* n2 g# p0 L- J* y【安装方法】( ?2 v  \9 c- C/ E. Q* X
1. 将 upload 目录下的文件,按路径覆盖到你网站根目录
4 G, E; p% z$ t* r. T! l: d9 p# }5 w% ~" T+ J( J$ r7 r1 M
2. 特别注意:! n2 x! X# z. N
   本修改仅限使用默认模板,路径为:/templates/default/home/spacecp_avatar.htm
  E% H. e. P7 Z& A! @; J/ C5 q   (如果你使用了其它模板,请自行替换文件标注部分代码。)
4 i6 a/ s# A, L
. m, e# |& \0 R" q+ d3. 确保目录权限:( o% L& o( ~' A
   chmod -R 755 uc_server/data/avatar% E$ O  G: ^/ P5 S9 r: F
; M+ w  x; v% y5 v, _. z
4. 进入:
) e2 b1 L" s6 ?; v   点头像进入 →个人空间 → 编辑头像
0 w+ z  j4 [9 s) A6 g6 Z2 I; y7 n+ @   即可使用 HTML5 上传: M: o  G; K6 v* x- F2 f
, }/ h( ^1 u. i- n6 r1 r+ V
【说明】, q$ p8 t$ `% [' v9 x( A8 E8 X& l
- 会直接替换 Flash 头像入口
. B* B; f3 g( C2 o% e9 h' z2 S- 无需安装、无需后台开启$ L3 d- m" e/ M) B
- 不影响 UCenter 原有逻辑6 J2 _/ H3 a& ?) B
- 保留头像简单裁剪功能(Cropper.js)
- [. y9 L2 K! \/ ^- 仅新增一个htnl5上传组件

/ K1 ~! v! [  G9 q1 K8 p8 b2 A* N

作者: 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) {( K- b& ^; o( y' d+ n7 `3 B9 J1 o+ K
  2.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));& w* Y9 G6 A/ k  Z" ?  S
  3.         switch($ext) {0 O+ J0 _+ Y2 N0 w9 x' u! L
  4.                 case 'mp3':$ n' M  A9 a; \; ~8 Y' X
  5.                 case 'wma':
    * A$ D: e* e+ P) @  J5 h3 d
  6.                 case 'mid':
    5 U! s& K3 ]& d  G6 f' u6 B% }
  7.                 case 'wav':  q% |- b2 g9 h) m3 _
  8.                         return '<object classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" ...>';. h: {5 G3 @, ~: ]" t6 Q
  9.                 case 'ra':8 q) a5 o; F) T5 d3 i
  10.                 case 'rm':3 g% b6 Z$ H" T2 f, v0 T  y) A
  11.                 case 'ram':
    : a4 C+ d% W' z. D" w: T
  12.                         return '<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" ...>';7 \8 t; k' D9 l
  13.         }
    0 c' G6 [( O$ K2 ?* O
  14. }3 V5 v, y, _# e5 t

  15. ( ]% k0 Y8 H! |! S, p6 N/ O$ ^
  16. function parsemedia($params, $url) {
    , w' s1 |. c# ~6 F6 L
  17.         ...1 _# m/ ?! I* ?, U& ^( [! n
  18.         return parseaudio($url, $width);8 F( P* x0 R0 K4 I
  19. }
复制代码
新的 HTML5 播放控件:
  1. // 替换原代码为 HTML5 播放控件1 @' w1 D4 A1 w  l) u- L8 W% x
  2. function parseaudio($url, $width = 400) {
    1 p: B+ W7 k6 {  H
  3.         $url = str_replace('\\"', '"', $url);
    , n7 U* U3 z8 F3 m+ r* F4 f
  4.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));$ d% O3 ~7 _1 F* M2 p

  5. 1 i/ f: K) Q8 p2 R3 N
  6.         switch($ext) {, e5 a: U# e3 a% l' E9 H  R) y
  7.                 case 'mp3':7 f/ y/ k( f6 H1 a
  8.                 case 'wma':8 x. X2 ]" T. J- I5 a
  9.                 case 'wav':% Y2 E/ F; o, F
  10.                 case 'mid':5 U0 E7 ^+ Q+ z
  11.                 case 'ogg':
    + q: q4 _$ }& i. H: @+ R6 p1 C  O8 k
  12.                         return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:2px;" src="'.$url.'"> </audio>';( Q# _3 n6 M; g+ X: E1 R
  13.                 case 'ra':8 [$ P5 l' ^6 m3 _2 {1 D
  14.                 case 'rm':( g' n" ]2 V. M( Y9 ^# G+ u4 t
  15.                 case 'ram':
      p' G, D$ c7 j4 E) g. v, ?
  16.                         // RM 无法 HTML5 播放,退化为链接) N+ v% @) `; a- ^) p! m- `+ Q+ T
  17.                         return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    " B0 z- l3 h  U
  18.         }& \' P! m0 {$ f8 i+ k
  19. }
    + D6 `, S( m' x
  20. & P' j# k1 D1 L% i
  21. function parsemedia($params, $url) {
    ! A5 I" F% s  l  B. A# Q

  22. " Z# S: a% H1 K1 r0 k4 i- n
  23.         $params = explode(',', $params);
    4 S9 N; ~, b" D# S# N+ f6 |- m
  24. 6 b. U9 N  B# q/ B( J3 t) @
  25.         $width  = isset($params[1]) && intval($params[1]) ? intval($params[1]) : 400;3 a! E/ x6 i8 B! P" G$ h, h  u( J
  26.         $height = isset($params[2]) && intval($params[2]) ? intval($params[2]) : 300;8 K: d1 Z/ ?0 z) k" d8 S
  27. 3 Q' s! b7 ?  G* C; q; ~& c( ~
  28.         $width  = min($width, 800);) i7 @. A, {$ u9 }9 v2 t
  29.         $height = min($height, 600);
    0 U7 D, p0 d2 [4 L! m
  30. ( f9 R) t6 ]/ ~
  31.         $url = str_replace(array('<', '>'), '', str_replace('\\"', '"', $url));8 y" ~" X& t, O
  32.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));! W3 l% v8 w+ ]

  33. 5 k( f: M" x1 x( c8 ]' X; b
  34.         /* HTML5 优先(现代浏览器) */3 t% m  ?7 Z) W) q) U$ z
  35.         if(in_array($ext, array('mp3','wav','ogg'))) {
    , W* a* r8 U4 {7 k
  36.                 return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:6px;">/ J5 F- x" A9 k. L6 @0 ^# N
  37.                                         <source src="'.$url.'" type="audio/mpeg">  S1 n2 l: T4 u9 r* C
  38.                                 </audio>';
    $ `. v; H9 c  h' {, b8 z( N5 [
  39.         }
    8 I6 e- N/ m. S- Z

  40. 4 Y8 B* |+ I8 c
  41.         if(in_array($ext, array('mp4','webm','ogg'))) {  O3 _: T9 f& c
  42.                 return '<video controls style="width:100%;max-width:'.$width.'px;border-radius:6px;"/ w( V* C" n  H* ^' r; w% c1 Y  j
  43.                                          poster="">: N% \3 }1 J+ P5 q6 d8 n% K. [/ I0 ]
  44.                                         <source src="'.$url.'" type="video/mp4">' d& z/ x, [& ?6 [
  45.                                 </video>';2 q0 w, B. o% V2 S1 M$ @9 `
  46.         }
    : I- ~3 l& T8 v

  47. / A" v% Z1 B' B* S, {  M  ^
  48.         /* Flash 逻辑保留(但不指望能用) */" E6 x8 Y6 L. `; e/ m
  49.         if(in_array(count($params), array(3, 4))) {
    0 t8 S+ ^* t* |7 ]% }
  50.                 $type = $params[0];; H8 g$ o) T: g+ u: P/ v9 t

  51. 6 ?. Z0 }" D0 @, E, t/ D3 F
  52.                 switch($type) {1 ?+ r9 L8 Y3 D. p: \1 p
  53.                         case 'mp3':
    ; Y( e" f9 u: h6 \; S& d
  54.                         case 'wma':
    * w, V  k5 h9 B- q
  55.                         case 'ra':( \. x. r$ c( e7 W
  56.                         case 'ram':1 \" i" c1 N* k& K5 y
  57.                         case 'wav':9 E1 B9 _0 J- ~5 u4 r) t9 ^
  58.                         case 'mid':& S& ~" _; o. T/ @7 l4 E
  59.                                 return parseaudio($url, $width);2 G1 e- N# b1 }; \1 u" v5 U

  60. : j1 C1 a3 d) D: \+ c$ G
  61.                         case 'rm':) a' ?1 W( g2 K9 b# ^6 B9 o( f
  62.                         case 'rmvb':
    / \8 ~, n3 _1 `) r
  63.                         case 'rtsp':3 }  Y3 Q, u, H4 k2 Q
  64.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    . t1 W# h4 q4 g! C+ y; O

  65.   W& Y! K  z. B- b! y3 X; a- y' ^& P
  66.                         case 'flv':- u$ N, w% N; v4 |4 R
  67.                         case 'swf':! q5 ?! l9 M8 x$ j1 B8 f
  68.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';" ?8 n6 \) C5 v- A
  69. : n$ H  P+ o/ C& Q$ j% k& q
  70.                         case 'asf':
    . ?. ~  q$ q! E8 I1 ?: L0 z
  71.                         case 'asx':0 z" c% m$ o% ]
  72.                         case 'wmv':
    " f7 B2 |, A4 e4 S
  73.                         case 'mms':) D  u# I/ d+ D) K3 f! q8 X8 j7 c2 i
  74.                         case 'avi':
    - c' C2 _9 d8 I% W' x" P" H' J
  75.                         case 'mpg':2 E/ [# z9 ]! P" N' N, b9 @8 F
  76.                         case 'mpeg':
    9 C* J* q' X, _
  77.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';. f1 @! X6 e5 R9 S! n9 x# {9 b
  78. + A3 g4 t" F8 H8 I2 R0 I) S
  79.                         case 'mov':0 v5 ~9 A6 r$ Z
  80.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';' ]& z7 q2 I6 ^3 ]1 ^9 I

  81. 0 @- [" }: f& y* d4 V) T- l& E5 O# D
  82.                         default:
    # Y4 r! j9 a% _
  83.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';+ L( Q" C5 G, c: q% b
  84.                 }
    1 e' G5 T' |! j  T
  85.         }
    2 ]4 \* \* R. {0 f4 v
  86.         return;
    . H! ^# Y" n( Z  O+ j% e
  87. }
复制代码

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

原FLASH已死:
  1. function parseflash($w, $h, $url) {
    2 v2 l* K+ V" B/ i( J# @# r  F
  2.         $w = !$w ? 550 : $w;
    " ?5 n  L8 K' @2 y: {) w" c
  3.         $h = !$h ? 400 : $h;! J, B' e) V: G( a7 U
  4.         preg_match("/((https?){1}:\/\/|www\.)[^\[\"']+/i", $url, $matches);/ B% J' \9 o- Y
  5.         $url = $matches[0];
    $ a  D0 y8 M7 @
  6.         $randomid = 'swf_'.random(3);
    . e% G0 H# \- h% G  i
  7.         if(fileext($url) != 'flv') {2 }" Y0 t" o2 B; s
  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>';' q3 w0 j4 _# U1 [+ b$ U
  9.         } else {5 B* [4 }( l0 O; `9 \( z
  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>';
    & T) M4 o1 s& q
  11.         }
    & z2 b* J7 e: a, W
  12. }
复制代码
不得已的修改方案(让原来的播放器直接显示为FLASH链接):
  1. function parseflash($w, $h, $url) {: T. F" ~% Z1 ?2 R3 U0 d* R  e
  2. return '<a href="'.$url.'" target="_blank" rel="noopener noreferrer">'.$url.'</a>';
    6 ~+ K6 }# G; B( \$ y* v6 M
  3. }
复制代码

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






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