phpcms模块开发之swfupload的使用介绍

下面就为您详细讲解"phpcms模块开发之swfupload的使用介绍"。

什么是swfupload?

swfupload是一款使用Flash和JavaScript开发的多文件上传工具,可以上传多个文件,可以显示上传进程,在上传过程中可以使用自定义的事件来实现一些个性化的处理,广泛应用于各类网站的文件上传功能中。

如何在phpcms中使用swfupload?

首先,我们需要下载swfupload插件,并将其放到phpcms的statics目录下,然后在模块的template/init.tpl.php中引入swfupload插件的相关文件。

<link href="{APP_PATH}statics/js/swfupload/swfupload.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="{APP_PATH}statics/js/swfupload/swfupload.js"></script>
<script type="text/javascript" src="{APP_PATH}statics/js/swfupload/swfupload.queue.js"></script>

引入swfupload插件的相关文件后,我们需要在模块的template/content_upload.tpl.php中编写HTML代码和JavaScript代码,来实现文件上传功能。

下面是一个示例:

<form action="{APP_PATH}?m=模块名&c=内容页_controller&a=upload" method="post" enctype="multipart/form-data">
    <div class="file-item" id="file-select-button">
        <span>选择文件</span>
        <input type="file" multiple="multiple" name="file" id="file-upload-button" />
    </div>
</form>

<div id="file-queue"></div>

<script type="text/javascript">
    $(function() {
        var settings = {
            upload_url : "{APP_PATH}?m=模块名&c=内容页_controller&a=swfupload",
            post_params : {},
            flash_url : "{APP_PATH}statics/js/swfupload/swfupload.swf",
            file_size_limit : "10 MB",
            file_types : "*.jpg;*.gif;*.png",
            file_types_description : "图片文件",
            file_upload_limit : 0,
            file_queue_limit : 0,
            custom_settings : {
                cancelButtonId : "file-cancel-upload-button",
                fileQueueId : "file-queue",
                uploadTriggerId : "file-upload-button",
                progressTargetId : "file-queue",
                layoutUrl : "{APP_PATH}statics/js/swfupload/layout.html"
            },
            debug : false,
            prevent_swf_caching : true,
            button_placeholder_id : "file-select-button",
            button_width : 80,
            button_height : 26,
            button_text : "<span>Select Files</span>",
            button_text_style : ".button span { font-size: 14px; }",
            button_text_top_padding : 3,
            button_text_left_padding : 12,
            button_action : SWFUpload.BUTTON_ACTION.SELECT_FILES,
            button_cursor : SWFUpload.CURSOR.HAND,
            button_disabled : false,
            button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT,
            swfupload_loaded_handler : swfuploadLoaded,
            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
        };

        var swfu = new SWFUpload(settings);
    });
</script>

该示例中,我们通过一个form元素实现了文件上传功能,input元素的multiple属性能够实现多文件上传功能,name属性指定了文件上传到服务器后的字段名。

在JavaScript代码中,我们通过SWFUpload对象来创建了一个swfupload对象,配置了相关的参数,实现了文件上传功能。其中涉及了一些事件(例如file_queued_handlerupload_progress_handler等),可以自定义处理方式实现个性化的操作。

示例1:实现文件上传时显示上传进度

swfupload插件提供了upload_progress_handler事件,可以用来监控文件上传的进度。我们可以通过和后端配合返回文件上传进度的信息,然后在前端实现上传进度条的功能。

下面是示例代码:

在后端,我们需要实现一个返回文件上传进度的接口。

public function upload() {
    $file = $_FILES['file'];
    //处理上传文件的逻辑
}

public function progress() {
    $progress = 0;
    if (file_exists("progress.txt")) {
        $progress = file_get_contents("progress.txt");
    }

    echo $progress; //返回上传进度
}

在前端,我们需要在fileQueued事件中添加相关的参数,然后在uploadProgress事件中实现进度条的显示。

var settings = {
    //...
    custom_settings : {
        //...
        layoutUrl : "{APP_PATH}statics/js/swfupload/layout.html",
        progressBar : new progressBar("progress-bar-container")
    },
    //...
    file_queued_handler : function(file) {
        this.customSettings.progressBar.show();
    },
    upload_progress_handler : function(file, bytesUploaded, bytesTotal) {
        var progress = parseInt(bytesUploaded / bytesTotal * 100, 10);
        this.customSettings.progressBar.setProgress(progress);
    }
    //...
};

function progressBar(containerId) {
    this.container = $("#" + containerId);
    this.progress = $("<div>").addClass("progress");
    this.bar = $("<div>").addClass("bar");
    this.progress.append(this.bar);
    this.container.append(this.progress);

    this.hide();
}

progressBar.prototype.show = function() {
    this.container.show();
};

progressBar.prototype.hide = function() {
    this.container.hide();
};

progressBar.prototype.setProgress = function(progress) {
    this.bar.css("width", progress + "%");
};

fileQueued事件中,我们创建了一个自定义参数progressBar,并通过一个自定义类progressBar实现进度条的显示。在uploadProgress事件中,我们通过计算已上传的数据占总数据的比例,然后更新进度条的进度。

示例2:实现跨域文件上传

如果你的phpcms模块是在一个独立的域名下面,而文件上传是跨域的,那么就需要实现跨域文件上传。

下面是示例代码:

在模块的controller中实现跨域文件上传的接口。

public function swfupload() {
    header('Access-Control-Allow-Origin:*');

    $targetDir = "uploads/";

    if (!file_exists($targetDir)) {
        mkdir($targetDir);
    }

    $tempFile = $_FILES['Filedata']['tmp_name'];
    $targetFile = $targetDir . $_FILES['Filedata']['name'];

    if (move_uploaded_file($tempFile, $targetFile)) {
        $data = array('success'=>true);
    } else {
        $data = array('success'=>false);
    }

    echo json_encode($data);
}

在前端的参数配置中,需要增加file_post_name参数指定上传文件的字段名。

var settings = {
    //...
    file_post_name : "Filedata",
    upload_url : "http://example.com/uploads.php",
    //...
};

注:以上示例代码为完整代码。其中示例代码中的{APP_PATH}可以替换为相应的路径。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:phpcms模块开发之swfupload的使用介绍 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • PHP图片上传代码

    当网站需要支持用户上传图片时,使用 PHP 代码实现图片上传功能是比较常见的做法之一。下面是实现 PHP 图片上传的完整攻略。 第一步:准备 HTML 代码 在 HTML 中,使用 <input> 标签并指定 type=file 属性,创建一个文件选择框。用户点击此框选择图片后,浏览器会为你提供一个图片文件对象。 实现 HTML 代码示例: &l…

    PHP 2023年5月23日
    00
  • PHP数据类型之布尔型的介绍

    PHP数据类型之布尔型的介绍 在PHP中,布尔型(Boolean)用于表示真假两个值,分别用true和false表示。它通常用于条件判断、循环等语句中,用于控制程序的执行。 定义布尔型变量 定义布尔型变量可以直接使用true或false关键字对变量进行赋值,也可以通过函数返回值来获取布尔型值。 // 直接赋值 $bool_true = true; // $b…

    PHP 2023年5月26日
    00
  • PHP字符串中抽取子串操作实例分析

    针对“PHP字符串中抽取子串操作实例分析”,以下是完整攻略。 什么是子串 子串(sub string)指的是字符串中的一部分。在PHP中,我们可以通过指定开始位置和长度,从一个字符串中抽取出指定的子串。 如何抽取子串 在PHP中,我们可以使用substr函数来抽取子串。substr函数的语法为: substr(string $string, int $sta…

    PHP 2023年5月26日
    00
  • php-app开发接口加密详解

    PHP-App开发接口加密详解 什么是接口加密? 接口加密是为了保证数据传输时的安全性,实现数据在传输过程中的加密,防止数据被窃取或者被篡改。接口加密可以通过多种方式实现,包括加密算法、数字证书、令牌验证等。 为什么需要接口加密? 当我们的应用程序需要与其它应用程序进行交互时,需要使用接口来实现数据交互。而接口在传输数据的过程中,可能会被黑客攻击或者信息被窃…

    PHP 2023年5月26日
    00
  • PHP CURL CURLOPT参数说明(curl_setopt)

    当使用 PHP 中的 CURL 库时,可以使用 curl_setopt() 函数来设置不同的选项参数。这些选项参数被传递给一个 CURL 句柄,CURL 句柄通过一个 URL 来标识一个需要检索的资源。这里我们就来详细讲解 “PHP CURL CURLOPT参数说明(curl_setopt)”。 CURLOPT 参数说明 在使用 PHP CURL 库时,cu…

    PHP 2023年5月27日
    00
  • 非常好的网站生成静态页面防采集策略与方法

    非常好的网站需要具有防止被采集的策略与方法,通常有以下两种方式: 方式一:使用验证码 验证码是一种常见的防止被采集的方法。用户需要在网站中填写完数据后,进入验证码页面,填写验证码,才可以进一步访问信息。这样做可以防止机器通过程序自动化抓取信息。 以下是使用Python库selenium自动填写网站验证码的示例: from selenium import we…

    PHP 2023年5月27日
    00
  • Linux Shell+Curl网站健康状态检查脚本,抓出中国博客联盟失联站点

    下面是详细讲解“Linux Shell+Curl网站健康状态检查脚本,抓出中国博客联盟失联站点”的完整攻略。 什么是Linux Shell+Curl网站健康状态检查脚本? Linux Shell+Curl网站健康状态检查脚本是一种可以通过命令行方式自动检查网站状态的脚本。它是基于Linux Shell和Curl命令实现的,可以快速地对一个或多个网站进行健康状…

    PHP 2023年5月27日
    00
  • php 解压rar文件及zip文件的方法

    介绍”PHP 解压RAR文件及ZIP文件的方法”的完整攻略如下: 确定压缩文件路径 首先,你需要确定要解压缩的压缩文件的路径。例如,假设你的压缩文件路径是 /path/to/file.rar 和 /path/to/file.zip。 安装PHP rar扩展 为了解压RAR文件,你需要安装PHP rar扩展。如果你使用的是Ubuntu或Debian,可以通过以…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部