博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Yii中使用swfupload批量上传图片
阅读量:7108 次
发布时间:2019-06-28

本文共 4337 字,大约阅读时间需要 14 分钟。

hot3.png

网站开发中,批量功能在所难免,如果你想自己写一个出来,那么折腾又何必重复造轮呢。官网有,但我测试下来并没那么的好用,所以我参考了 例子,结合yii,自己实现了个extension,并修改了中相关js,可以在批量上传图片中给每个图片添加alt属性,那么废话不多说,我们直接来看例子:

笔者是写一个extension,当然您也可以写成:

目录结构:

/extenstion

views

view.php

CSwfupload.php

view.php中内容如下,笔者为保持swfupload demo原味,基本参照原代码:

request->baseUrl;?>/css/swfupload.css" rel="stylesheet" type="text/css" />
    var swfu;    var settings;    window.onload = function() {        settings = {            flash_url : "
request->baseUrl;?>/js/swfupload/swfupload.swf",            upload_url: "
config['upload_url'];?>", //后台上传处理路径            post_params: 
config['post_params']);?>, //可自组织需要的post参数            file_size_limit : "
config['file_size_limit'];?>", //上传文件大小限制            file_types :'*.jpg;*.png;*.gif',            //file_types_description : "All Files",            file_upload_limit : 10,            file_queue_limit : 0,            custom_settings : {                progressTarget : "fsUploadProgress",                cancelButtonId : "btnCancel"            },            debug: false,            // Button settings            //button_image_url: "images/TestImageNoText_65x29.png",            button_width: "65",            button_height: "29",            button_placeholder_id: "spanButtonPlaceHolder",            button_text: '
Select',            button_text_style: ".theFont { font-size: 16; }",            button_text_left_padding: 12,            button_text_top_padding: 3,            // The event handler functions are defined in handlers.js            file_queued_handler : fileQueued,            file_queue_error_handler : fileQueueError,            file_dialog_complete_handler : fileDialogComplete,            upload_start_handler : uploadStart,            upload_progress_handler : uploadProgress,            upload_error_handler : uploadError,            upload_success_handler : uploadSuccess,            upload_complete_handler : uploadComplete,            queue_complete_handler : queueComplete // Queue plugin event            };        swfu = new SWFUpload(settings);        };        function uploadStart(obj){ //在上传开始前得到图片对应的描述信息,作为post参数提交        var alt = $('#'+obj.id).find('input').val();        swfu.addPostParam("alt_desc", alt);        return true;    }   //function uploadSuccess(){location.reload();}
    
        
Upload Queue        
        
        
    

CSwfupload.php文件内容如下 :

render("view", array());    }    public function run()    {        $baseUrl = Yii::app()->request->baseUrl;        Yii::app()->clientScript->registerScriptFile($baseUrl . '/js/swfupload/swfupload.js', CClientScript::POS_HEAD);        Yii::app()->clientScript->registerScriptFile($baseUrl . '/js/swfupload/swfupload.queue.js', CClientScript::POS_HEAD);        Yii::app()->clientScript->registerScriptFile($baseUrl . '/js/swfupload/fileprogress.js', CClientScript::POS_HEAD);        Yii::app()->clientScript->registerScriptFile($baseUrl . '/js/swfupload/handlers.js', CClientScript::POS_HEAD);    }}

ok,extension我们已经写好,下面看看,在后台如何调用并上传图片

在后台调用:

beginWidget('CActiveForm', array(    'id'=>'jos-cos-hotelpic-form',    'enableAjaxValidation'=>false,)); ?>
widget('application.extensions.swfupload.CFSwfUpload', array(    'config' => array(        'upload_url' => Yii::app()->createUrl('action/upload'),        'post_params' => array('PHPSESSID'=>$_COOKIE['PHPSESSID']), //必须传sessionid,flash提交无法传递头信息        'file_size_limit' => '2 MB',        )    ));?>
endWidget(); ?>

生成的界面如下:

88631357630820

controller中上传图片处理程序:

public function actionUpload(){   if (isset($_FILES["Filedata"])) {       $upload_file = $_FILES['Filedata'];       $file_info = pathinfo($upload_file['name']);       $file_type = $file_info['extension'];       $filename = uniqid().'.'.$file_info['extension'];       $saveFile = 'upload/'.$filename;       $name = $_FILES['Filedata']['tmp_name'];       if (move_uploaded_file($name, $saveFile)) {           echo '上传成功';       }else{       }    }    Yii::app()->end();}

需要注意的时,swfupload默认上传图片没有添加图片描述的功能,需要改fileprogress.js,添加如下代码于44行(progressStatus.innerHTML = " ";)之后:

var imageAlt = document.createElement("div");imageAlt.className = "imageAlt";imageAlt.innerHTML = "
";this.fileProgressElement.appendChild(imageAlt);

一切OK。

转载于:https://my.oschina.net/yonghan/blog/597836

你可能感兴趣的文章
Ubuntu 18.04下可视文件管理器Midnight Commander的安装使用
查看>>
sqoop内部结构
查看>>
MySQL5.7 切不要"乱射" --transaction-write-set-extraction=MURMUR32
查看>>
ip tcp udp首部
查看>>
C#中文件操作类FileUtil
查看>>
前端知识点
查看>>
安装并配置基于虚拟用户的vsftpd
查看>>
Activity间用Intent和Bundle传递参数
查看>>
【C1】scala入门
查看>>
http请求状态码和请求信息的含义
查看>>
关于假设检验
查看>>
MapReduce原理(分布式计算模型)----------总结
查看>>
Linux学习笔记(九)--命令学习(文件与目录查看)
查看>>
2013最新Ghost Windows 7硬盘安装法详细(图文)教程
查看>>
centos6.5 安装mysql5.6多实例(多配置文件)
查看>>
Redis配置文件主要功能说明
查看>>
为什么要"去IOE"
查看>>
ubuntu 12.04安装mongodb+eclipse erlang plugin+erlang runtime
查看>>
arm-linux-gcc4.4.3编译s3c2410平台linux内核
查看>>
gitlab服务器
查看>>