Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

使用家园相册flash进行批量上传功能的分析

[复制链接]
rikioy 发表于 2011-9-30 09:09:47 | 显示全部楼层 |阅读模式
最近在做的一个工具需要有批量图片上传功能,所以就分析了一下家园中flash批量上传功能,以便给自己的模块添加这个功能。
批量上传flash的页面的url是
  1. home.php?mod=spacecp&ac=upload&op=flash&albumid=0
复制代码
通过URL分析到,我们要找的代码在 home_spacecp.php 中,我们看到在这个文件最后一行,把ac这个参数作为名称包含了一个include文件,ac参数的值是 upload ,所以我们要找的文件是 spacecp_upload.php

  1. require_once libfile('spacecp/'.$ac, 'include');
复制代码
再继续看这个文件,这里面虽然也有近三百行,不过我们只关注flash批量上传,所以就在这里面摘出所需要的东西就好了。其中包含了模板文件 spacecp_upload.htm  224行开始的代码就是op = flash进入的流程
  1. </div>
  2. <div class="bm">
  3. <script type="text/javascript">
  4. document.write(AC_FL_RunContent(
  5. 'width', '100%', 'height', '400',
  6. 'src', '{IMGDIR}/album_upload.swf?config=$config&albumid=$_GET[albumid]',
  7. 'quality', 'high', 'wmode', 'transparent'
  8. ));
  9. </script>
复制代码
这里面调用了flash文件,并且给flash文件传入了2个参数,参数的url是config=$config&albumid=$_GET[albumid]',
config 和 albumid
albumid就是我们进入批量上传flash时候url中带的albumid
config是一个php变量,这个我们在 home_spacecp.php 文件中找。
  1. $config = urlencode($_G['siteroot'].'home.php?mod=misc&ac=swfupload&op=config'.($_GET['op'] == 'cam'? '&cam=1' : ''));
复制代码
$config 传入的是一个路径,我们看看这个路径是什么。在浏览器中打开这个路径。后面跟的config'.($_GET['op'] == 'cam'? '&cam=1' : ''));参数我们暂时先忽略。
打开后出现的是一个xml文件

看xml文件的内容大概知道了,这个应该是flash上传框的配置文件,包括了它的菜单按钮的文字等。
我们看这段的php文件。文件是 home_misc.php 其中没有什么有用的内容,依旧包含了一个include文件 misc_swfupload.php
我们看这个文件。
这个文件就是flash批量上传的核心控制文件了。其中可以分为4块内容
第1块 1-34行,基本参数配置,
第2块36-53行,上传完成后的后续处理代码
第3块53-76行,生成传入flash的配置参数
第4块77-96行,上传图片代码
其他
原理是这样,flash作为一个客户端执行post ,post的地址就是我们config中的uploadurl,看下也就是现在这个文件自己。
所以我们说上传的控制也就是这个php文件了。第一部分有

  1. if(!empty($_POST['uid'])) {
复制代码
这样开始的一段代码,就是处理post来的uid,因为flash post过来之后。就没有$_G等信息存在了。所以要在这里判断一下用户权限,并且设置一下。然在第四块,对$_FILES 进行处理,在这里用的是一个pic_save函数,我们查一下可以查到。函数里调用了discuz 的upload类进行文件上传。之后返回一个数组$uploadfiles。根据返回数组的值,我们判断上传是否成功。并且设置状态$status
根据状态位,我们输出flash的配置参数,其中还涉及到了一个文件,刚才没有提到,misc_swfupload.htm 这个文件是一个xml的模板文件,根据我们 misc_swfupload.php 中的配置信息,输出相应的xml
好了flash批量上传大体就是这个样子,其中涉及到一些细节的参数没有提到,感兴趣的可以自己去试一试,哪个参数是做什么的。让这个flash批量上传功能完全为我们自己所用。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
otherbank 发表于 2011-9-30 09:20:58 | 显示全部楼层
这个必须得顶
回复

使用道具 举报

m.king 发表于 2011-9-30 10:02:33 | 显示全部楼层
不错的说!
回复

使用道具 举报

m.king 发表于 2011-9-30 10:30:59 | 显示全部楼层
本帖最后由 m.king 于 2011-9-30 10:31 编辑

好东西!!!!!!!!!!!!
回复

使用道具 举报

heimeng 发表于 2011-9-30 12:16:07 | 显示全部楼层
不错,分析的很好
回复

使用道具 举报

ARCHY` 发表于 2011-9-30 12:18:16 | 显示全部楼层
支持起来了
回复

使用道具 举报

pcyi 发表于 2011-10-1 18:48:08 | 显示全部楼层
回复

使用道具 举报

hlong313 发表于 2011-10-8 02:16:22 | 显示全部楼层
good!俺是菜鸟,最好弄个案例出来,学习下
回复

使用道具 举报

 楼主| rikioy 发表于 2011-10-8 09:17:35 | 显示全部楼层
案例就是dx中家园相册的批量上传啊。
回复

使用道具 举报

大飞鸽 发表于 2011-10-8 09:25:24 | 显示全部楼层
技术贴,顶。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-22 01:40 , Processed in 0.027920 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表