samsonphp/upload

安装数: 3,068

依赖者: 4

建议者: 0

安全性: 0

星星: 0

关注者: 3

分支: 5

语言:JavaScript

1.1.2 2016-08-22 15:35 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:08:10 UTC


README

Latest Stable Version Build Status Code Coverage Total Downloads Scrutinizer Code Quality Stories in Ready

连接

要在您的项目中使用此模块,您必须在 composer.json 中添加依赖项

"require": {
    "samsonphp/upload": "1.*"
},

执行 composer installcomposer update 后,您将获得 Upload 模块的所有类和函数。

配置

Upload 模块的配置不是必需的,但如果您想为上传文件创建唯一的文件名或上传目录名,则可以使用它。
如果您不使用配置,您的上传目录将被命名为 'upload',文件名将随机生成。

感谢 SamsonPHP 模块/服务配置,您可以创建简单的配置类

class UploadConfig extends \samson\core\Config
{
    // Callback function for creating upload dir
    public $uploadDirHandler = 'uploadDirHandler';

    // Callback function for creating file name
    public $fileNameHandler = 'uploadNameHandler';
}

创建异步文件上传

当前模块的主要功能是异步文件上传。请看下面的示例。

HTML 代码示例

首先,您需要创建包含您的文件输入的 HTML 容器

<p>
    <input type="hidden" class="__action" value="<?php url_base('catalog/upload'); ?>">
    <input type="hidden" class="__file_size" value="50000000">
    <input class="__example_upload" type="file" name="uploadFile">
</p>
  • 具有类 "__action" 的输入定义了您的上传处理程序。它可以是在您的包中的控制器方法或简单的控制器函数。它始终必须具有类 "__action"。
  • 具有类 "__file_size" 的输入定义了上传文件的最大大小。它始终必须具有类 "__file_size"。
  • 具有类 "__example_upload" 的输入按钮用于从客户端计算机中选择文件。如果您为此输入使用类名 "__upload",则不需要创建任何 JavaScript 代码即可使一切正常工作。

您还可以添加以下功能块

  • 具有类 "__progress_text" 的容器将显示文件上传的百分比。
  • 具有类 "__progress_bar" 的容器内的段落标签将创建上传进度条的动画。

请记住,您必须为这些块添加一些 CSS 样式才能按需使用它们。

JavaScript 代码示例

如果您使用具有不同类的输入,则需要处理您的输入

// Cache file input
var file = s('.__example_upload');

// Bind upload event
uploadFileHandler(file, {
    // Handle event before file uploading
    start: function () {
        alert('Uploading started');
    },
    // Handle event after upload finishing
    response: function (response) {
        alert('Uploading finished');
    }
});

函数 uploadFileHandler(file, options) 的第二个参数不是必需的,您可以使用它在上传文件时创建一些特殊的东西。

上传处理程序示例

我们 HTML 示例中的服务器操作是控制器 'catalog/upload'。让我们创建此函数

function catalog_async_upload()
{
    // Parameter for callback functions
    $parameter = 5;

    // Create AJAX response array
    $json = array('status' => 0);

    // Create object for uploading file to server
    $upload = new \samsonphp\upload\Upload(array('png','jpg'), $parameter);

    if ($upload->upload($filePath, $fileName, $realName) {
        $json['status'] = 1;
        // Add full path to uploaded file into AJAX response
        $json['filePath'] = $filePath;
        // Add uploaded file name into AJAX response
        $json['fileName'] = $fileName;
        // Add real file name (user's file name) into AJAX response
        $json['realName'] = $realName;
    }

    return $json;
}

要创建文件上传,您需要创建类 \samsonphp\upload\Upload,其构造函数可以有三个参数。

  • 第一个参数是上传文件允许的文件扩展名数组。
  • 第二个是回调函数的参数数组(或仅一个参数)。如果使用模块配置,则可以使用它。
  • 第三个是配置类。这是系统参数,默认值是 m('upload')。如果您正在处理简单的上传模块,则最好不指定它。

直接创建上传的方法是 upload(& $filePath = '', & $fileName = '', & $realName = '')。您可以使用此方法的方法参数获取主要文件信息。

我们还可以创建配置类中定义的回调函数

/**
* External handler for defining upload catalog
*/
function uploadDirHandler($parameter)
{
    return 'upload/catalog'.$parameter;
}

/**
* External handler for defining upload file name
*/
function uploadNameHandler($parameter, $extension)
{
    return 'item'.$parameter.$extension;
}

如您所见,我们的名称处理函数中有参数 $extension。此参数始终定义为此回调函数的最后一个参数。
在我们的例子中,在创建回调函数之后,上传目录将被命名为 'upload/catalog5',文件名将是 'item5'。
不要忘记,在当前示例中,所有上传的文件都将具有简单名称(可能有不同的扩展名),因此您必须为正确使用上传文件名处理器想出一些逻辑。

SamsonOS 开发。