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

yizhihongxing

下面就为您详细讲解"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计算年龄的方法的攻略。通过该方法可以计算出某个人的周岁和虚岁。在此之前,我们需要掌握几个基本的数学和计算知识。 确定生日日期 在计算年龄时,首先需要确定某个人的出生日期。这可以通过不同的方式来获取,比如使用表单输入或从数据库中获取数据。在本文中,我们将使用字符串类型“YYYY-MM-DD”作为生日日期。 计算周岁 计算周岁非常简单,只需要当前…

    PHP 2023年5月26日
    00
  • PHP实现图片合并的示例详解

    PHP实现图片合并的示例详解 在网页开发中,经常会使用图片进行界面设计。有时候需要将多张图片合并成一张来节省浏览器请求的次数,这时候需要使用PHP来实现图片合并。本文将介绍如何使用PHP实现图片合并,并提供两个示例。 实现原理 PHP实现图片合并的原理是将多张图片读入内存中,使用imagecopy()函数将它们合并成一张图片,并输出成一个图像文件。 实现步骤…

    PHP 2023年5月23日
    00
  • phpstudy后门rce批量利用脚本的实现

    首先,需要说明一下,本文严禁用于非法操作,仅用于安全研究和提高意识。对于任何因为使用本文所述方法而带来的后果,本文作者不承担任何法律责任。 确定漏洞版本 在使用脚本前,需要先扫描网站是否存在phpstudy后门漏洞,并确定漏洞版本,常见的版本有: phpstudy 2016版 v8.0 phpstudy 2018版 v8.0 phpstudy 2018版 v…

    PHP 2023年5月27日
    00
  • PHP抓取网页、解析HTML常用的方法总结

    以下是关于“PHP抓取网页、解析HTML常用的方法总结”的完整攻略: 1. 前言 在开发Web应用时,我们常常需要从外部网站中获取信息。为此,我们需要学会如何使用PHP抓取网页,并解析HTML页面。本文将介绍PHP中常用的网页抓取和HTML页面解析方法,并提供两个示例说明。 2. PHP抓取网页常用的方法 使用PHP抓取网页有多种方法,以下是三种常用的方法:…

    PHP 2023年5月27日
    00
  • 微信小程序支持AR吗?微信ar口红实时试色方法

    微信小程序支持AR 微信小程序官方提供了AR能力,可以通过调用AR能力的API实现小程序内的AR效果。AR能力是基于微信团队自主研发的微信ARSDK技术实现的,支持设备操作系统为iOS(11.0以上)和安卓(6.0以上)的手机。 微信AR口红实时试色方法 假设我们有一个需求,在小程序内实现口红实时试色的效果。下面将详细讲解如何利用微信小程序的AR能力,实现这…

    PHP 2023年5月23日
    00
  • 微信小程序wx.request使用POST请求时后端无法获取数据解决办法

    针对“微信小程序wx.request使用POST请求时后端无法获取数据”的问题,需要注意以下几点: 确认后端是否开启CORS跨域访问 确认后端是否支持JSON数据格式的提交 确认请求头是否设置Content-Type为application/json 确认请求参数是否正确传递 通过调试工具观察请求和响应的数据,分析问题原因 下面就从这五个方面逐一进行讲解: …

    PHP 2023年5月23日
    00
  • PHP基于array_unique实现二维数组去重

    下面我就给你介绍一下“PHP基于array_unique实现二维数组去重”的完整攻略。 前言 在实际开发过程中,经常会遇到需要对二维数组进行去重处理的情况,比如从数据库中取出的数据,或是从表单提交的数据中提取出的多维数组等等。在PHP中,我们可以利用array_unique()函数来实现对一维数组的去重,但对于二维数组,该函数就失灵了。不过,我们可以借助一些…

    PHP 2023年5月26日
    00
  • PHP实现的一致性Hash算法详解【分布式算法】

    PHP实现的一致性Hash算法详解【分布式算法】 什么是一致性Hash算法 在分布式系统中,一个广泛使用的问题是分布式的负载均衡,如何使得请求尽可能均衡的分发到不同的节点上,而不是集中在某一个或几个节点上。一致性Hash算法就是用来解决这个问题的一种算法。 一致性Hash算法的核心思想是将所有节点映射到一个环上,将请求也映射到环上,然后通过顺时针找到的第一个…

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