jquery file upload php代码分析
首先进入构造方法 __construct() 再进入 initialize()
因为我是post方式传的数据 在进入initialize()中的post()
也就是说 经过上面的分支 最终进入的post() 在1255行
看到这个
$upload = isset($_FILES[$this->options['param_name']]) ?
$_FILES[$this->options['param_name']] : null;
上传后tmp文件的地址就在$upload中
$this->options['param_name'] 根据最前面的定义 这里的值是files
和DEMO中的页面的值一致 在html中 name="files[]"
因为是php 对多文件框的处理 页面中名字后面要加[] 但是后台仍是files 因为我只需变量名 []只是说明是多文件框
所以这里 upload 的值就是$_FILES["files"]
PS:看这里http://www.cnblogs.com/cart55free99/p/3495387.html
要获取到tmp文件路径 首先要从$_FILES获取值 $_FILES["xxx"]
xxx和页面上的name属性要匹配
看到1280行
$file_name ? $file_name : $upload['name'][$index],
如果$file_name是空 那么传入handle_file_upload中的第二个参数
就是$upload['name'][$index]
也就是$_FILES["files"]['name'][$index] 也就是文件本身的名字
=======================================
关于$this->get_server_var()
在1101行有定义
protected function get_server_var($id) {
return isset($_SERVER[$id]) ? $_SERVER[$id] : '';
什么是$_SERVER呢?
参考http://www.chhua.com/web-note2893
==========================================
关于删除
当上传后服务器端传来的json中一个file数据含有deleteType 和 deleteUrl项时 页面就会显示DELETE按钮
否则就只显示黄色的cancel按钮
点击删除按钮 会发送一个含有待删除文件名的带参请求 同时这个请求的TYPE是DELETE (请求TYPE种类:PUT GET POST...)
比如
Request URL:http://localhost/jQuery-File-Upload-8.8.7/server/php/?file=index.jpg
Request Method:DELETE
那么在153行左右 initialize函数就进入delete分支
delete()在967行 进入delete后通过isFile()作判断看文件是否存在 之后就可以删除文件 unlink()是删除文件函数
关于缩略图
约303行 create_scaled_image()函数就是创建缩略图的 其中version是用来计算版本号 比如已经有pic图片 再上传同名图片就是pic(1)
这里的options在后面有用到 options是一个数组 后面取options['crop']的值 来看看所上传的图片的缩略图是否需要裁减(有些图片本身很小 无需裁减 不过大部分图片都需要裁减)
约383行 imagecopyresampled — 重采样拷贝部分图像并调整大小 调整图片后写入 394行这里看不明白 但是write_image不是函数名
例如在44行
'upload_dir' => dirname($this->get_server_var('SCRIPT_FILENAME')).'/files/',
$_SERVER['SCRIPT_FILENAME']:当前运行 PHP程序的绝对路径及文件名。
dirname(XXX) 则是获取xxx所在的目录(如果XXX是目录就是获得XXX父及目录)
因此这里upload_dir 就是上传文件的目标目录
PS 另外一些get_server_var的信息参考http://*.com/questions/18478053/how-do-i-change-the-default-upload-path-for-jquery-file-upload
上传图片============================================================
Add files delete必需
jquery.fileupload-process.js jquery.fileupload-ui.js jquery.fileupload.js main.js
非必须
validate不是必需 它是用来检测文件大小 格式的的合法性的
app.js audio video transport
image -----没有image可以上传 只是在选择文件后没有上传前这个时候 没有缩略图