使用codeigniter实现jquery上传插件'uploadify'

时间:2010-07-04 03:59:25

标签: php jquery codeigniter upload uploadify

我如何在codeigniter中实现这一点?Uploadify(Jquery)

我的意思是控制器是什么?如何追踪进度?如果用户没有安装flashplayer会发生什么?

我如何检查progess?有没有人用codeigniter试过这个?

3 个答案:

答案 0 :(得分:1)

我已经在codeigniter中成功实现了uploadify,如下所示:

在标题视图中

<script type="text/javascript" src="<?php echo base_url()?>resources/js/jquery.js"></script>
<link rel="stylesheet" type="text/css" media="all" href="<?php echo base_url()?>resources/uploadify/uploadify.css" />
<script type="text/javascript" src="<?php echo base_url()?>resources/uploadify/swfobject.js"></script>
<script type="text/javascript" src="<?php echo base_url()?>resources/uploadify/jquery.uploadify.v2.1.0.min.js"></script>

在页面视图中

<input id="fileInput" name="fileInput" type="file" />
 <script type="text/javascript">
    $(document).ready(function() {
    $("#fileInput").uploadify({
        'uploader'       : '<?php echo base_url()?>resources/uploadify/uploadify.swf',
        'script'         : '<?php echo site_url()?>/managerupload/vehicle_imageUpload',
        'cancelImg'      : '<?php echo base_url()?>resources/uploadify/cancel.png',
        'fileExt'        : '*.jpg;*.jpeg;*.png;*.gif',
        'folder'         : '/nonexistant',
        'auto'           : true,
        'multi'          : false,
        'scriptData'     : {'vehicleID': '<?php echo $vehicleID?>'},
        'onComplete'     : function() {vImg_reload('<?php echo $vehicleID?>');}
    });    });

</script>

scriptData配置选项通过POST传递。

注意:onComplete配置选项允许您执行一个功能;在这种情况下,它是一个Ajax调用来更新当前车辆的图像;这可能与您有关,也可能与您无关。让我知道如果是,我会发布它。事实上,我宁愿不要把水弄得一团糟。

在控制器中

function vehicle_imageUpload(){
    $this->_checklogin();

    $file_dir = "vehicle_images/";

    $config['upload_path'] = './vehicle_images/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '1000000';
    $config['overwrite'] = TRUE;
    $config['remove_spaces'] = TRUE;
    $config['encrypt_name'] = FALSE;

    $this->load->library('upload', $config);

    if(! $this->upload->do_upload('Filedata')){
        echo $this->upload->display_errors();
    }else{

       $errors = $this->upload->display_errors();

       $upload_info = $this->upload->data();

       // Insert file information into database
       $insert_data = array(
        'vImg_vehicle_id_fk' => $this->input->post('vehicleID'),
        'vImg_filename' => $upload_info['file_name'],
        'vImg_filepath' => $upload_info['file_path'],
        'vImg_primary' => 1,
        'vImg_directory' => $file_dir
       );
       $this->db->insert('vehicle_images', $insert_data);
      }
}

这是使用CI上传类的标准上传处理程序;这里我们使用传递的POST项'vehicleID'将图像记录插入数据库。

与所有Flash内容一样,您必须解决Flash Cookie Bug问题。有两个选项,通过Uploadify的'scriptData'数组传递您的会话ID(如上所述),并使用现有的会话ID从上传控制器重新加载会话。另一个选择是没有Codeigniter匹配会话useragent。

在application / config.php

$config['sess_match_useragent'] = FALSE;

这可以防止会话类在看到不属于会话的Useragent时破坏会话。

如果您担心这会带来安全隐患,您只需要记住用户代理是假的,只要您的现有安全性得到妥善实施,您就不会有任何问题。

答案 1 :(得分:0)

我正在查看我正在进行的项目,但决定不使用它,因为我有原型,我无法让两者很好地协同工作。不过我确实在旅行中找到了这个:

http://uploadify.com/forum/viewtopic.php?f=7&t=47&p=210&hilit=codeigniter#p1855

希望它有所帮助。

仅供参考,我最终使用了CI上传类,iframe和AJAX原型。请参阅相关帖子here

答案 2 :(得分:0)

我们最近在我们正在开发的项目中使用它,我们只是将示例uploadify.php放在Web根目录中。

javascript和flash调用此文件来处理上传,我修改了uploadify.php以回显上传的文件数据。从那里,原始页面上的javascript将一个隐藏的输入添加到我们正在使用的表单中。

当用户提交表单时,会调用一个CI控制器/方法,这就是处理调整大小/操作图像的方法。

如果您需要进一步说明,请告知我们。

编辑:要回答问题的其他部分,如果未安装Flash,则会显示常规文件输入元素。我们使用它的方式,javascript是正确功能所必需的,但这是一个设计选择。