【高州情】高州人深圳站

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

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

FLASH最终还是没能跟上时代的步伐,被各大浏览器抛弃,我们这老破旧论坛连头像也上传不了,花了一个星期反编译了Discuz7.2的FLASH头像上传逻辑,并把这套逻辑转移到了X2身上,
5 q- u8 X% D( c$ }0 g. [0 [用同样的方法外挂了一个HTML5的插件去替代原来的FLASH,恢复了头像的上传,4 W+ L0 M# c+ |% Z4 Z
虽然界面上还有些粗糙,但起嘛能用了,如果各位发现头像上传有什么问题可以跟帖留言。
8 k8 M/ V; ?# r$ t5 p
7 F; ~$ I6 a6 b' p
- c  C8 Z8 w- X" y+ V4 y
[attach]14769[/attach]
7 \) O: Y( S. W8 i3 d5 Z
3 U9 `2 i/ L% ?0 ]
Discuz X2 HTML5 头像插件 v1.0  2026-05-059 T) v) M  n9 |0 o; |; a
==============================
3 Y4 d6 Q: X2 i4 N" @. B$ K4 ~# b【目录结构】5 `- V  ^5 A: b4 d0 f
upload/
  i0 Z/ ^- h; i& ^. g6 i$ ^7 T├── html5avatar.php        插件后端接口(核心逻辑)
, L, ]: a! r, E* ]8 j└── template/8 W  x0 v+ s8 j3 U, R
        └─ default/1 U$ y: V% I3 s. d2 l% V
            └─ home/
- [( m; Y5 h& Z. A& g                └─ spacecp_avatar.htm        前端模板(含 Cropper.js)
0 q; `1 Q% z% i: t3 X
4 C1 |( e1 h' x% j$ L8 ^# p2 w【适用环境】8 }6 b) l! F' [$ `  _$ E8 E+ a5 P
- Discuz! X2 UTF-8
' ?: R) H$ y' U/ a: I- UCenter 1.6
( |9 ]  D7 z: w- D' u7 j5 z; }- PHP 5.6+$ V; K7 @4 B" D+ Z
' ~$ j/ s: m1 k7 b* V% m. d1 a5 S- L
【安装方法】& [2 j% H  Z% o
1. 将 upload 目录下的文件,按路径覆盖到你网站根目录
: ^( b+ C# c5 P7 U  [5 L  G
, _0 V1 {8 |; q. {- [2. 特别注意:$ T. b) r5 w& \! Z( S# \/ Y# I1 x6 ?% ?
   本修改仅限使用默认模板,路径为:/templates/default/home/spacecp_avatar.htm5 G; N" R% ?8 `0 H. ]& s
   (如果你使用了其它模板,请自行替换文件标注部分代码。)1 u0 e0 W4 |( K

/ ]: g# K! u( f& a) q/ d: M: |3. 确保目录权限:! P; t0 z, m2 E. W; U. g
   chmod -R 755 uc_server/data/avatar3 s4 ~4 Y/ o+ a9 h# {
& l; F; @+ l* m3 R: A) T
4. 进入:9 V' p. D( A- c/ t
   点头像进入 →个人空间 → 编辑头像" y5 r+ U  G( g9 r1 o
   即可使用 HTML5 上传2 k( i3 [4 Y, X% }3 ^( G% ?( s9 b
. m1 N" f7 E  @3 C/ g- p
【说明】
( _0 a0 Y2 [+ C$ Y/ l6 |9 f- 会直接替换 Flash 头像入口3 }, X( ~; U/ x( b6 u+ X
- 无需安装、无需后台开启( J7 q) h9 L* y
- 不影响 UCenter 原有逻辑
* x/ W- s4 ?0 b) {% u- 保留头像简单裁剪功能(Cropper.js)
" S3 X* H8 _+ b& M7 `) _" T- 仅新增一个htnl5上传组件
, O6 h# H! D3 m
9 i. X7 x* `  [2 e1 {; M

作者: 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) {
    6 E4 J+ O2 N- T) h. Y5 r0 _
  2.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));
    & T: l2 I5 ~, e2 s! o: b
  3.         switch($ext) {- d. c* X( _. a9 }$ V3 K/ \
  4.                 case 'mp3':
    9 E3 V6 c( W! p: X9 L  F4 S
  5.                 case 'wma':
    . n4 D0 N" }6 G4 I
  6.                 case 'mid':
    & E* H6 c! g! S8 h4 {; K+ H
  7.                 case 'wav':/ T. v. B$ B3 i
  8.                         return '<object classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" ...>';  T% w. ?; j) I# b8 q
  9.                 case 'ra':
    6 l1 ~$ r# U7 S0 @5 @
  10.                 case 'rm':
    * W# r0 Q( g/ u2 y; f
  11.                 case 'ram':
      ~- [" ]5 w3 E+ U; x
  12.                         return '<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" ...>';( I) X& ?/ z, b/ b' |; w$ L
  13.         }
    7 u$ x- i( Y6 W2 m- U
  14. }
    ) v' s; l0 x' v

  15. * K6 o; y: ?6 b( q4 j! A" S4 R0 A. ^( f
  16. function parsemedia($params, $url) {1 @4 [$ a% J5 p* p& w$ P( m
  17.         ...
    & X4 t& m, C$ h/ @
  18.         return parseaudio($url, $width);! W# p1 `) ]! l' @2 j
  19. }
复制代码
新的 HTML5 播放控件:
  1. // 替换原代码为 HTML5 播放控件3 `* e  \1 T" z) c7 e1 }
  2. function parseaudio($url, $width = 400) {
    1 u( Q2 u" W" `
  3.         $url = str_replace('\\"', '"', $url);
    : Q0 t. k! Q, y6 f) V# `) R
  4.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));
    . \# f. ~2 A: d4 z; S. m* [  g
  5. ; I4 Y: `+ A! _0 Z; ]& d3 N) @
  6.         switch($ext) {
    - [# \9 t+ x+ B6 Y0 U1 ?4 v
  7.                 case 'mp3':
      T1 J& N) J# e
  8.                 case 'wma':! R9 B+ i$ Y% A5 ?* K( Y6 q
  9.                 case 'wav':. ]$ t" d2 h/ q+ V) {
  10.                 case 'mid':
    , H  |5 y$ W$ j+ X; l
  11.                 case 'ogg':
    0 i4 M! U; x6 q' u& z
  12.                         return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:2px;" src="'.$url.'"> </audio>';0 Y5 o8 v" a8 }- g2 W+ E7 g
  13.                 case 'ra':
    . l' p- u' S) t; v* h& t. ]) p
  14.                 case 'rm':* s* r/ U2 {* Z4 O( b  J+ t8 a( O
  15.                 case 'ram':
    : g$ [- E( l& H8 I; c- S, G2 h
  16.                         // RM 无法 HTML5 播放,退化为链接
    7 L6 `: ?/ o5 Q4 Q. T. `% |# F
  17.                         return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    1 f% `7 T. B9 @2 j' T: s
  18.         }
      ]( n* u% s9 L5 g/ C
  19. }
    $ z$ Z" N0 K/ z

  20. ) l, n& [6 G+ k" l8 R) Z- m. Q  n
  21. function parsemedia($params, $url) {
    7 K, t! }% i' R4 ?* K
  22. ) N5 U7 `  R7 O# N; H
  23.         $params = explode(',', $params);* Q9 O2 j9 C2 g5 b' g
  24.   M1 K1 r) V) ?% K( \2 a
  25.         $width  = isset($params[1]) && intval($params[1]) ? intval($params[1]) : 400;0 q) O/ G+ b8 j( P: M9 T
  26.         $height = isset($params[2]) && intval($params[2]) ? intval($params[2]) : 300;
    ' `0 O! E0 c9 c. q

  27. . z- b: Z7 A% z- t
  28.         $width  = min($width, 800);3 q' y' e+ r2 ?: R- l* h4 R
  29.         $height = min($height, 600);
      M0 Y6 K- g  b, x( z1 |

  30. * a  E1 |1 S7 Y" F; C. B0 r$ V
  31.         $url = str_replace(array('<', '>'), '', str_replace('\\"', '"', $url));
    3 z( `  g/ U( B! f4 _/ e7 M
  32.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));
    1 \+ M( }- H- ]) J
  33. ' n; x5 l6 D2 h) ]0 ~' F0 `
  34.         /* HTML5 优先(现代浏览器) */, n) c* Q! @. z6 i% M# S
  35.         if(in_array($ext, array('mp3','wav','ogg'))) {
    7 |! R  [8 h% X7 `  n2 T
  36.                 return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:6px;">
    ' B2 b! Y: V* `' p
  37.                                         <source src="'.$url.'" type="audio/mpeg">
    * b3 g6 C6 q5 a
  38.                                 </audio>';3 _8 [8 t' [8 B5 V- m
  39.         }
    + ^/ P) H' N2 ~2 H* T2 A" j" V$ x

  40. 3 F4 I( V" i% e8 V& l
  41.         if(in_array($ext, array('mp4','webm','ogg'))) {
    ! C) D0 ?, T6 B6 ^. Z% @. D2 H+ B4 N- |3 L
  42.                 return '<video controls style="width:100%;max-width:'.$width.'px;border-radius:6px;"
    9 P4 F) o1 [6 Z' U
  43.                                          poster="">* B, M. z! l9 E% v. F9 o9 p
  44.                                         <source src="'.$url.'" type="video/mp4">
    & M1 V8 |1 O( Y6 x3 i( T$ f& I
  45.                                 </video>';; Z' ^! u4 D5 U; X
  46.         }; o0 p% _  D' t) u, O. o* D

  47. + V) N& t; V! C; {$ ^% M8 K
  48.         /* Flash 逻辑保留(但不指望能用) */, B2 J1 B# `6 W' [1 p! K
  49.         if(in_array(count($params), array(3, 4))) {* V( u$ V' ]7 r9 Z; ]! x3 d% j7 I5 e. `
  50.                 $type = $params[0];
    3 b7 r! b! V- H: u8 P2 M

  51. ; `- A& l( Q" j; P
  52.                 switch($type) {5 |. p- l. l2 t4 J7 I
  53.                         case 'mp3':4 M  H( ^1 {7 X& i( G
  54.                         case 'wma':
    6 D4 u" v/ [; i/ v7 N1 |4 R
  55.                         case 'ra':
    / N" A6 d: q/ i% z& ?: @- A
  56.                         case 'ram':8 z. ^0 v+ c4 {: v4 e' Z
  57.                         case 'wav':
    ! |. G! i: e- j+ X- y0 x
  58.                         case 'mid':3 [' u1 g- r: h* i5 y. m, S
  59.                                 return parseaudio($url, $width);
    - p' c) A, F' Y: n

  60. & i9 ^) U  e3 o  D4 N' o1 h
  61.                         case 'rm':
      H2 e& _( @9 F) v
  62.                         case 'rmvb':
    * u1 ]; T. e! _, |+ P, `2 U
  63.                         case 'rtsp':
    3 O  W( u4 w& C1 b) t
  64.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';4 b' `& u# |- y0 E* k7 d+ F
  65. 9 f; J) a5 {) U7 s" S# Q
  66.                         case 'flv':6 m1 l; y0 y: W* N8 A5 t; ]
  67.                         case 'swf':
    . c+ c/ _5 K# f# V2 y/ z
  68.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    : h1 p# b# L2 E6 j5 E! O

  69. , j1 m7 y! d2 D2 |! I
  70.                         case 'asf':
    4 |3 _) B* h! J' L+ w: [
  71.                         case 'asx':, M, ~) y. Z+ f
  72.                         case 'wmv':
    4 Q3 ?- Q- v9 t7 E" x* }7 ], Q$ m
  73.                         case 'mms':
    $ U  `" x9 s+ e; I- R: V' i
  74.                         case 'avi':- f2 ]3 X& @6 G  n
  75.                         case 'mpg':
    : I; {2 Y8 C% A8 N, }; i9 {
  76.                         case 'mpeg':4 o0 U, I; y$ s, ]2 I4 s, h4 B
  77.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';1 d9 \* i( W- u2 V* b
  78. 3 k- |/ N: Z2 N- g- m9 {( M: @
  79.                         case 'mov':
    : @# \5 z: t4 Z) o8 X; ?
  80.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';) e$ _/ P5 {$ d0 s" z

  81. 4 l/ q5 }. a. J1 E/ v- a
  82.                         default:$ ]/ s" a/ O7 R1 l2 @
  83.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';: }9 h  D% H+ @. s- p9 N$ A+ [) ~
  84.                 }: K  w  r+ K1 R4 b( T/ g
  85.         }
    6 B# W9 t! ?  M
  86.         return;
    6 _8 J8 q5 \+ O; N
  87. }
复制代码

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

原FLASH已死:
  1. function parseflash($w, $h, $url) {
    , a, b. I3 `" [; V; B
  2.         $w = !$w ? 550 : $w;* ]' J7 j- g) O' i! u
  3.         $h = !$h ? 400 : $h;$ ~* W' a; G2 e" U" y
  4.         preg_match("/((https?){1}:\/\/|www\.)[^\[\"']+/i", $url, $matches);# D) \) W+ u" F' f2 S6 }
  5.         $url = $matches[0];
    9 {! W8 ]* }/ Z% U0 ~0 w: }
  6.         $randomid = 'swf_'.random(3);& J' x. j7 `8 ?8 Y# V) c/ R
  7.         if(fileext($url) != 'flv') {
    ; r2 D* P$ e& M7 d9 [; 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>';
    : q1 G  ~6 `9 x
  9.         } else {
    ) y' o7 Z; [( j1 t' 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>';$ A( D5 @: g! X+ z" M& a
  11.         }$ k" j* T9 U3 J. F0 H: C
  12. }
复制代码
不得已的修改方案(让原来的播放器直接显示为FLASH链接):
  1. function parseflash($w, $h, $url) {
    4 b5 @+ z9 ]" c" k' ^
  2. return '<a href="'.$url.'" target="_blank" rel="noopener noreferrer">'.$url.'</a>';
    ! S* g  j8 y5 D' q1 i
  3. }
复制代码

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






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