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可变函数学习小结 在PHP中,可变函数是一种特殊的函数调用方式,可以动态调用函数。使用可变函数可以简化代码,使代码更具有灵活性。 语法 可变函数的调用方式如下: $functionName(variable) 其中$functionName表示一个函数名的字符串或者是一个函数名作为对象方法的数组,…

    PHP 2023年5月25日
    00
  • PHP对表单提交特殊字符的过滤和处理方法汇总

    接下来我将详细讲解“PHP对表单提交特殊字符的过滤和处理方法汇总”的完整攻略。 前言 在 PHP 中,处理表单提交特殊字符是一个常见的任务。如果不对表单数据进行处理和过滤,可能会导致安全问题,如 SQL 注入、XSS 攻击等。因此,正确处理表单提交特殊字符对于确保网站安全非常重要。本文将介绍一些方法来过滤和处理 PHP 中的表单数据。 1. htmlenti…

    PHP 2023年5月26日
    00
  • PHP7中对十六进制字符串处理的问题详解

    标题:PHP7中对十六进制字符串处理的问题详解 背景 在 PHP 7 之前,关于十六进制字符串处理的函数有很多限制和缺陷。例如,无法处理超过 0x7fffffff 的十六进制值,也无法处理空格分隔的十六进制值等等。而在 PHP 7 中,引入了新的十六进制字符串处理函数,解决了这些问题。 新增函数 hex2bin() hex2bin() 函数将一个十六进制字符…

    PHP 2023年5月26日
    00
  • php将字符串随机分割成不同长度数组的方法

    下面是一个将字符串随机分割成不同长度数组的PHP方法。 1. 基本思路 我们可以将字符串分割成指定长度的小块,然后再根据需要将这些小块随机排列,最终得到一个随机分割后的数组。 2. 代码实现 可以通过PHP函数“array_slice”和 “shuffle”实现以上思路的代码实现: function splitString($string, $length)…

    PHP 2023年5月26日
    00
  • PHP+MYSQL实现用户的增删改查

    下面就来详细讲解一下“PHP+MYSQL实现用户的增删改查”的完整攻略。 一、准备工作 在开始之前,我们需要做一些准备工作才能进行后续的操作。 1.1 创建数据库 首先,我们需要在MYSQL中创建一个数据库,这个数据库将用来存储用户的信息。我们可以在MYSQL中使用下面的SQL语句来创建一个名为users的数据库: CREATE DATABASE users…

    PHP 2023年5月27日
    00
  • Php中文件下载功能实现超详细流程分析

    我来为你详细讲解“Php中文件下载功能实现超详细流程分析”的完整攻略。实现文件下载功能需要经历以下几个步骤: 1. 创建下载链接 在需要提供文件下载的页面中,添加一个超链接,用于触发文件下载。这个超链接的href属性需要指向一个下载文件的处理程序,比如download.php。 示例: <a href="download.php?file=e…

    PHP 2023年5月26日
    00
  • 微信小程序框架的页面布局代码

    下面我会详细讲解“微信小程序框架的页面布局代码”的完整攻略。 什么是页面布局代码? 页面布局代码是指微信小程序框架中,用于构建小程序页面的代码。页面布局代码主要由WXML和WXSS两部分组成,其中WXML用于描述页面的结构,WXSS用于描述页面的样式。 WXML的页面布局代码 WXML是一种类似于HTML的语言,用于描述小程序页面的结构。它由标签、属性和数据…

    PHP 2023年5月23日
    00
  • PHP实现链式操作的三种方法详解

    PHP实现链式操作的三种方法详解 在PHP中,使用链式操作可以让代码看起来更加简洁,易于维护。针对于链式操作,本文将介绍三种实现方法,分别是使用普通函数、使用魔术方法和使用静态方法。 方法一:使用普通函数 使用普通函数实现链式操作,就是在每个函数的末尾都返回对象本身,这样就可以实现链式调用。 示例1: class Chain{ private $var; p…

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