Discuz! x2 相册批量上传分析

  首先我们进入Discuz相册批量上传页面,从地址栏可以分析

home.php?mod=spacecp&ac=upload&op=flash&albumid=0

  访问的文件是 source\module\home\home_spacecp.php

  此文件底部

require_once libfile('spacecp/'.$ac, 'include');

  调用source\include\spacecp\spacecp_upload.php文件,进入这部分:

if(!checkperm('allowupload')) {

showmessage('no_privilege_upload', '', array(), array('return' => true));

}

cknewuser();

$config = urlencode($_G['siteroot'].'home.php?mod=misc&ac=swfupload&op=config'.($_GET['op'] == 'cam'? '&cam=1' : ''));

$albums = getalbums($_G['uid']);

$actives = ($_GET['op'] == 'flash' || $_GET['op'] == 'cam')?array($_GET['op']=>' class="a"'):array('js'=>' class="a"');

$maxspacesize = checkperm('maxspacesize');

if(!empty($maxspacesize)) {

space_merge($space, 'count');

space_merge($space, 'field_home');

$maxspacesize = $maxspacesize + $space['addsize'] * 1024 * 1024;

$haveattachsize = ($maxspacesize < $space['attachsize'] ? '-':'').formatsize($maxspacesize - $space['attachsize']);

} else {

$haveattachsize = 0;

}

require_once libfile('function/friend');

$groups = friend_group_list();

loadcache('albumcategory');

$category = $_G['cache']['albumcategory'];

$categoryselect = '';

if($category) {

include_once libfile('function/portalcp');

$categoryselect = category_showselect('album', 'catid', !$_G['setting']['albumcategoryrequired'] ? true : false, $_GET['catid']);

}

}

  此处的代码中的

$config = urlencode($_G['siteroot'].'home.php?mod=misc&ac=swfupload&op=config'.($_GET['op'] == 'cam'? '&cam=1' : ''));

  是访问flash 处理文件的入口

include_once template("home/spacecp_upload");

  然后调用模版文件,下面我们来查看模版相应的相册批量上传部分的代码:

<script type="text/javascript">
document.write(AC_FL_RunContent(
  'width', '100%', 'height', '400',
  'src', '{IMGDIR}/album_upload.swf?config=$config&albumid=$_GET[albumid]',
  'quality', 'high', 'wmode', 'transparent'
));
</script>

  代码中的config来自 上面提到的$config 这部分代码,这部分代码用来显示flash,来自于static/js/common.js

  接下来,访问将进入flash处理的关键部分:source\include\misc\misc_swfupload.php,首次执行的是:

} elseif($op == 'config') {
$hash = md5($_G['uid'].UC_KEY);
$uploadurl = urlencode(getsiteurl().'home.php?mod=misc&ac=swfupload'.($iscamera ? '&op=screen' : ($isdoodle ? '&op=doodle&from=':'')));
.......中间代码省略
$albums = getalbums($_G['uid']);
//系统分类
loadcache('albumcategory');
$categorys = $_G['cache']['albumcategory'];
$categorystat = $_G['setting']['albumcategorystat'] ? intval($_G['setting']['albumcategorystat']) : 0;
$categoryrequired = $_G['setting']['albumcategoryrequired'] ? intval($_G['setting']['albumcategoryrequired']) : 0;

  这段代码中的

albums = getalbums($_G['uid']);//系统分类
loadcache('albumcategory');
$categorys = $_G['cache']['albumcategory'];

  用于获取用户的相册分类,这也是容易出错的地方(当用户在后台开启了相册分类,但是没有设置分类项,导致$categorys为空)

$categorystat = $_G['setting']['albumcategorystat'] ? intval($_G['setting']['albumcategorystat']) : 0;

  上面这段代码用于调用返回给flash的相册分类xml文件(template\default\home\misc_swfupload.htm)

  当第一次访问完 misc_swfupload.php文件,将返回xml文件给flash 用于显示,主要处理在文件底部,如果返回的xml文件有错误将导致flash上显示不正确,或者终止继续运行,导致flash停滞。返回正常程序将通过用户提交上传图片将再次访问,该文件进入

elseif($_FILES && $_POST) {
        if($_FILES["Filedata"]['error']) {
                $uploadfiles = lang('spacecp', 'file_is_too_big');
        } else {
                $_FILES["Filedata"]['name'] = addslashes(diconv(urldecode($_FILES["Filedata"]['name']), 'UTF-8'));
                $_POST['albumid'] = addslashes(diconv(urldecode($_POST['albumid']), 'UTF-8'));
                $catid = $_POST['catid'] ? intval($_POST['catid']) : 0;
                $uploadfiles = pic_save($_FILES["Filedata"], $_POST['albumid'], addslashes(diconv(urldecode($_POST['title']), 'UTF-8')), true, $catid);
        }
        $proid = $_POST['proid'];
        $uploadResponse = true;
        $albumid = 0;
        if($uploadfiles && is_array($uploadfiles)) {
                $status = "success";
                $albumid = $uploadfiles['albumid'];
        } else {
                $status = "failure";
        }
}

  其中以下这段代码:

$uploadfiles = pic_save($_FILES["Filedata"], $_POST['albumid'], addslashes(diconv(urldecode($_POST['title']), 'UTF-8')), true, $catid); 

  作用是保存图片(从临时目录移动到服务器端,达到上传文件效果),函数来自source\function\function_spacecp.php。

  到此,相册批量上传图片已基本结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值