【高州情】高州人深圳站

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

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

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

, c4 H3 p" U  S: F' A1 Y$ l) x0 @8 n2 s& c# _4 k
. c& O- Q  r, p$ {& @
[attach]14769[/attach]
! p' m% a0 V3 Q# P, [) T7 s/ L: p1 y! ]% {; {4 g7 v0 R
Discuz X2 HTML5 头像插件 v1.0  2026-05-059 `4 v% H2 \: [+ t  a4 u& v
==============================. e, Y# ]1 h2 }% H2 p7 z7 r
【目录结构】; ]$ E( j2 n2 G, Z( `# W7 w! Z
upload/6 n$ d* e' q: O
├── html5avatar.php        插件后端接口(核心逻辑)
: w* t4 Y1 F2 V4 @! a5 a└── template/
" g* i1 f  [6 }' L$ B/ {0 R# ~        └─ default/
# e. ?. ~6 ^, `% H* C+ c. {/ _3 ]            └─ home/
) k9 r+ f( M3 |7 L. T- r9 B9 q                └─ spacecp_avatar.htm        前端模板(含 Cropper.js)
: G1 ?0 D1 d1 v  @+ H3 B1 j/ E0 G' w
【适用环境】2 y% w; J# M. }3 a$ Q' r3 W. ~
- Discuz! X2 UTF-8
/ S$ A1 I. H, P9 G- UCenter 1.6
5 Y6 ]. U0 }: q& \! m- PHP 5.6+3 [& f0 Q8 |& x
8 ~! e! r% z! o
【安装方法】7 v7 C4 N% ~" d$ ^
1. 将 upload 目录下的文件,按路径覆盖到你网站根目录6 x. S& H: b9 ]! F9 m' w* l

9 l1 }6 G  N, @9 C2. 特别注意:( g- O- k+ W& Q* A5 E
   本修改仅限使用默认模板,路径为:/templates/default/home/spacecp_avatar.htm
, p% p" n* v! G   (如果你使用了其它模板,请自行替换文件标注部分代码。)
7 ^  a+ r! F% f3 J
6 p: p' G! d. j9 @% |( c3. 确保目录权限:4 l. h! l9 f* a  M
   chmod -R 755 uc_server/data/avatar
4 z  Q3 e5 d. s! U( [
, e2 F/ P+ _, T; Y4. 进入:) M' Z2 R2 m, [/ b5 V8 b
   点头像进入 →个人空间 → 编辑头像
2 k3 H8 h3 C( A/ I6 d& N   即可使用 HTML5 上传" p1 A4 D- L! q% w" t, A/ D4 b

' }' @- ?3 u4 ~0 v【说明】0 B+ U# j0 d$ |! {& H8 u
- 会直接替换 Flash 头像入口
  \: K: t- @  b$ _- 无需安装、无需后台开启+ ]0 \0 R& L( [  V
- 不影响 UCenter 原有逻辑) R+ F( _% z6 `8 O: q+ ~, ^$ n% T
- 保留头像简单裁剪功能(Cropper.js)$ A' D2 \' k% l- i. e3 y+ k: V7 v
- 仅新增一个htnl5上传组件
/ f0 Z( o: q6 U7 x1 k
6 s% F1 q. h# W1 f

作者: 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) {
    # F5 L6 s4 B! R
  2.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));1 G% N' _4 T4 F8 U6 r
  3.         switch($ext) {$ y# v5 n- d6 u5 f3 I5 \
  4.                 case 'mp3':  C* g. o" m" O' B  {
  5.                 case 'wma':$ M/ R1 r5 @  e
  6.                 case 'mid':- g" j  l: C, _( N9 C  H: m
  7.                 case 'wav':
    9 s8 T; U5 H9 j" }! r) S
  8.                         return '<object classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" ...>';
    . u/ j9 I, g! m) b8 P# U& H$ g& h6 _
  9.                 case 'ra':
    & A" h7 @8 c8 u  i5 J9 a
  10.                 case 'rm':
      }4 w( d: n; H6 P' l# m8 t" T
  11.                 case 'ram':
    ) o) D5 r  ?7 H5 R& G& f  }
  12.                         return '<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" ...>';
    - O) j& ~& @0 ~$ q, h, i' w$ s/ c
  13.         }
    . }. p; q+ l& A6 w
  14. }" x" F8 _; \# V1 n' c

  15. . P; U7 V. e0 Q/ w+ Z) v
  16. function parsemedia($params, $url) {
    6 h: N, }( W! q! I2 @- U
  17.         ...
    ' x1 _/ {( u: t7 W& f' K# P: `# J
  18.         return parseaudio($url, $width);* K, e! U! l9 |% [$ [
  19. }
复制代码
新的 HTML5 播放控件:
  1. // 替换原代码为 HTML5 播放控件- e, J( y+ q9 L- S% d; z
  2. function parseaudio($url, $width = 400) {
    % v2 b2 C  Q2 u3 j0 e6 `
  3.         $url = str_replace('\\"', '"', $url);* o+ ~. J4 C& N! }- i3 |" ?8 x+ y
  4.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));
    , a) q* C6 N( M  {8 E4 n# P
  5. ( q+ J7 z, p+ ^( N
  6.         switch($ext) {0 ~" ?# z. A. ?3 y% K" e$ U$ Y8 ]
  7.                 case 'mp3':1 J7 b: [  o$ o! v& o8 z
  8.                 case 'wma':3 s+ `7 q5 L0 B7 s* h" E2 W
  9.                 case 'wav':/ v0 o7 ]6 y6 Q7 W6 n& z1 p* D2 ?. K, w
  10.                 case 'mid':' p9 e1 v9 b7 s  a0 y1 w
  11.                 case 'ogg':
    % V& f' ]7 i: h% |4 Y  F! G
  12.                         return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:2px;" src="'.$url.'"> </audio>';& N$ |5 r: `' t) M- |! a
  13.                 case 'ra':1 v% U2 o) G  c) D0 v/ p
  14.                 case 'rm':
    4 \9 p' u! D! D5 q- B9 p: F: ]
  15.                 case 'ram':
    0 u# M/ ?3 ^3 f7 `' j7 K
  16.                         // RM 无法 HTML5 播放,退化为链接3 h2 d; ?6 q1 e9 {" u
  17.                         return '<a href="'.$url.'" target="_blank">'.$url.'</a>';' d  |, Q0 x6 p' f- `9 `8 Q
  18.         }; l* b) n- p" l/ J& M) H
  19. }
    / G$ S  b! N6 o- c9 B

  20. ( j2 @1 \  c0 G
  21. function parsemedia($params, $url) {: ?( {3 U9 Z! V4 b5 P. }
  22. , i7 o7 g8 u- ~( A! R3 U) |0 l
  23.         $params = explode(',', $params);
    7 {8 I9 p7 h4 O% Z1 q7 a, {
  24. ) @, l2 l. d5 U9 ]1 C5 a
  25.         $width  = isset($params[1]) && intval($params[1]) ? intval($params[1]) : 400;0 G( i0 s4 h( M# @+ ^
  26.         $height = isset($params[2]) && intval($params[2]) ? intval($params[2]) : 300;
    2 }/ ]- B$ `! {6 G3 K
  27. 2 [* T- j- q6 W& v! ~
  28.         $width  = min($width, 800);
    ' t3 W1 O8 E( n# w+ u1 Y
  29.         $height = min($height, 600);8 {1 t% ]6 {3 q, s4 I# O

  30. # j8 ]* G% {! ?9 n' q8 m2 `
  31.         $url = str_replace(array('<', '>'), '', str_replace('\\"', '"', $url));
      `8 @( z9 k9 F" V
  32.         $ext = strtolower(substr(strrchr($url, '.'), 1, 5));+ g1 {* D% H; `# w9 F7 G
  33. % t( Q7 E* ~4 Z! V" [
  34.         /* HTML5 优先(现代浏览器) */
    9 C3 H2 H6 Y5 J) x
  35.         if(in_array($ext, array('mp3','wav','ogg'))) {  s% G7 z) o$ h2 D/ [. O
  36.                 return '<audio controls style="width:100%;max-width:'.$width.'px;border-radius:6px;">* v- m" o" O7 G, D
  37.                                         <source src="'.$url.'" type="audio/mpeg">3 P  A" Z' ?. z# W& }/ b, N
  38.                                 </audio>';' k9 P, A' a# P7 M
  39.         }
      F/ ?4 B7 x; J+ X, c9 y% ^. P
  40. # V8 R9 e/ O; I- F( J
  41.         if(in_array($ext, array('mp4','webm','ogg'))) {6 o% G! |) w$ U
  42.                 return '<video controls style="width:100%;max-width:'.$width.'px;border-radius:6px;". `, P, _. J0 [/ r2 N
  43.                                          poster="">8 m( J, D1 T% U4 K
  44.                                         <source src="'.$url.'" type="video/mp4">3 ]+ p! ^, A" B% {" X
  45.                                 </video>';
    # y% k/ a* P/ l) C" f# t
  46.         }- N: Z# D# ]6 ?# q

  47. , ?: \+ t, s; U& w$ w. }
  48.         /* Flash 逻辑保留(但不指望能用) */' `( o$ T; x6 R) D, H5 {
  49.         if(in_array(count($params), array(3, 4))) {
    9 p( ]- b; Z' F/ f
  50.                 $type = $params[0];' Q3 F* u+ k4 l8 r! U

  51. % M/ Y1 E! K. g  _
  52.                 switch($type) {
    4 E1 \8 Q$ h# j# h: I% f. c
  53.                         case 'mp3':
    % E  \2 E! }6 _  E3 }3 j: J5 W; ?
  54.                         case 'wma':
    * C6 W( I0 a6 [2 s3 T" D" ]8 J
  55.                         case 'ra':. {0 A: @! e. C5 ~5 `
  56.                         case 'ram':0 m0 R) Y. Q) H3 d4 g
  57.                         case 'wav':
    , c" a+ F/ e" w* r
  58.                         case 'mid':
    ; C( q4 E- f, c" f
  59.                                 return parseaudio($url, $width);( t: w5 U8 W9 z6 K
  60. ( _( @, A! P, S: [
  61.                         case 'rm':
    / z7 c) b* K3 i6 n: w% w7 K8 E" ]
  62.                         case 'rmvb':# x, W+ f* P, h! x. C' s
  63.                         case 'rtsp':4 `+ [9 h. A! z8 Q' y0 c. R" Z
  64.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    3 r# }' T: X" i$ V" q
  65. 9 q4 o4 |& l; d* ^1 \- I2 j' `
  66.                         case 'flv':. O8 W3 P( Y- W" H# o5 D+ X
  67.                         case 'swf':) i6 A( i$ p" f) j
  68.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    ! v! b0 _  m3 n$ W6 n  t5 y
  69. & t3 T( c! [, i$ m* o
  70.                         case 'asf':4 f( p9 K: t. R6 h  j
  71.                         case 'asx':% v, K: l1 `, I7 y+ X& t2 I. e  G( h
  72.                         case 'wmv':$ g- ?3 p# V. v
  73.                         case 'mms':
    1 U; w0 M$ _2 X+ Y3 p3 h
  74.                         case 'avi':
    " {9 L* U, @3 E! V; f% ^
  75.                         case 'mpg':
    2 {& J! w0 _* j- P, H
  76.                         case 'mpeg':
    - ^7 A5 G9 {( W( \& |
  77.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';2 Q8 J- `+ @4 x3 ?" y% z; x( h4 y4 k1 @

  78. / K7 i, Y! ?9 M- r4 R+ ~6 T
  79.                         case 'mov':
    $ t0 X5 |4 v) _' H. M
  80.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
    6 n. z; X( `' h* K# v
  81. , m. E# w/ E; m, c8 S0 p
  82.                         default:
    " h+ `! I+ r$ e7 T0 Q7 }
  83.                                 return '<a href="'.$url.'" target="_blank">'.$url.'</a>';: ?1 j* G! e& @* z  `# v% h
  84.                 }
    5 a; H; l7 h0 q! V2 f, c/ ^' @% M7 x
  85.         }2 ^  R- ^. D# l: e" l0 v; A
  86.         return;, Z$ I' i5 B1 Q; }  V. G0 S5 {
  87. }
复制代码

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

原FLASH已死:
  1. function parseflash($w, $h, $url) {
    , @! r7 T9 r1 E" s
  2.         $w = !$w ? 550 : $w;/ Y7 j& E% I7 h# @1 k5 l
  3.         $h = !$h ? 400 : $h;8 p! U3 h/ k- {/ Q! ~' U% M6 u5 v
  4.         preg_match("/((https?){1}:\/\/|www\.)[^\[\"']+/i", $url, $matches);9 S1 u  g$ n/ _0 C* g! L* z/ @5 N( l
  5.         $url = $matches[0];7 M" E" r5 T0 s; F/ s" Q5 J
  6.         $randomid = 'swf_'.random(3);
    1 y4 }5 B; Y6 @* l& ]5 }; r
  7.         if(fileext($url) != 'flv') {! k. v5 ]# f9 x4 Q
  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>';% P4 O5 A) ]- s2 ^& C$ V
  9.         } else {
    " F; O% X2 e: L
  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>';1 i: Z$ C& w6 t% c; ?: ]
  11.         }: c2 }( p6 }+ v6 s
  12. }
复制代码
不得已的修改方案(让原来的播放器直接显示为FLASH链接):
  1. function parseflash($w, $h, $url) {8 J+ Z& K9 \1 \; b8 x: A; t- G- ]
  2. return '<a href="'.$url.'" target="_blank" rel="noopener noreferrer">'.$url.'</a>';
    - ]$ d' \! X9 I9 h. Y  k' @5 O
  3. }
复制代码

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






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