zoukankan      html  css  js  c++  java
  • jQuery File Upload 插件 php代码分析

    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://stackoverflow.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可以上传 只是在选择文件后没有上传前这个时候   没有缩略图

  • 相关阅读:
    ie10 css3 transition 过渡
    asp.net之一步一个脚印
    MyEclipse安装aptana插件的问题(link方式)转
    MyEclipse的Aptana插件中配置ZenCoding成功
    PS CS6 安装错误:FATAL: Payload '{3F0238754A5246059DB6A88D4A813E8D} Camera Profiles Installer 6.0.98.0' information not found in Media_db.
    PC客户端的开发插件Eclipse RCP
    Silverlight获取焦点
    广而告知
    wpf窗体定位
    surface开发教程[ScatterView控件] 二.
  • 原文地址:https://www.cnblogs.com/cart55free99/p/3497631.html
Copyright © 2011-2022 走看看