【问题标题】:CakePHP Uploader Plugin - Saving multiple sizes with Behavior setupCakePHP Uploader Plugin - 使用行为设置保存多种尺寸
【发布时间】:2012-11-08 21:26:49
【问题描述】:

我正在尝试将Uploader 插件用作我在Web 应用程序中使用的User 模型的Behavior。我已经将它与我命名为 filename 的配置一起使用,如下所示:

<?php
class Avatar extends AppModel {
    public $name = 'Avatar';
    public $actsAs = array (
        'Uploader.Attachment' => array (
            'filename' => array (
                'name'        => 'setNameAsImgId',
                'saveAsFilename' => true,
                'uploadDir'    => '/files/avatars/160/',
                'dbColumn'    => 'filename',
                'defaultPath'    => 'default.png',
                'maxNameLength'    => 20,
                'overwrite'    => true,
                'stopSave'    => true,
                'allowEmpty'    => false,
                'transforms'    => array (
                    array('method' => 'resize', 'width' => 160, 'height' => 160, 'dbColumn' => 'filename', 'append' => false, 'overwrite' => true)
                )
            )
        )
    );
// and so on...
?>

此配置将文件保存到文件夹/files/avatars/160,我通过Users控制器使用此方法保存所有160像素大小的图像:

<?php
class UsersController extends AppController {

public function add () {
    if ($this->User->Avatar->save($this->request->data)) {
        // do some code...
    }
}

在视图add我会插入这段代码来上传文件:

echo $this->Form->input('Avatar.filename', array('type' => 'file', 'label'=>'Upload the avatar '));

如果我只保存一个名为 filename 的配置,如上例所示,这很好用,我的问题是我需要保存同一图像的不同尺寸和裁剪,所以我想保存一个尺寸列表,如这个:

/files/avatars/160/filename.jpg
/files/avatars/48/filename.jpg

为此,我想向我的Avatar 模型添加另一个配置

<?php
class Avatar extends AppModel {
    public $name = 'Avatar';
    public $actsAs = array (
        'Uploader.Attachment' => array (
            'filename' => array (
                'name'        => 'setNameAsImgId',
                'saveAsFilename' => true,
                'uploadDir'    => '/files/avatars/160/',
                'dbColumn'    => 'filename',
                'defaultPath'    => 'default.png',
                'maxNameLength'    => 20,
                'overwrite'    => true,
                'stopSave'    => true,
                'allowEmpty'    => false,
                'transforms'    => array (
                    array('method' => 'resize', 'width' => 160, 'height' => 160, 'dbColumn' => 'filename', 'append' => false, 'overwrite' => true)
                )
            ),
            'small' => array (
                'name'        => 'setNameAsImgId',
                'saveAsFilename' => true,
                'uploadDir'    => '/files/avatars/48/',
                'dbColumn'    => 'filename',
                'defaultPath'    => 'default.png',
                'maxNameLength'    => 20,
                'overwrite'    => true,
                'stopSave'    => true,
                'allowEmpty'    => false,
                'transforms'    => array (
                    array('method' => 'resize', 'width' => 48, 'height' => 48, 'dbColumn' => 'filename', 'append' => false, 'overwrite' => true)
                )
            )
        )
    );
// and so on...
?>

我应该如何设置UsersController 以使用Avatar 保存同一图像的多个裁剪? 我是否还应该更改 add 视图以使其正常工作? 我不会在表单中使用多个输入文件。

【问题讨论】:

    标签: plugins cakephp-2.0 behavior uploader


    【解决方案1】:

    你可以这样做:

    $this->Form->input('Avatar.filename.', array('type' => 'file', 'multiple');
    

    如您所见,我在字段名称和 multiple 属性之后放置了一个.。有了它,您可以进行多次上传。所以$this-&gt;request-&gt;data中的结果是这样的:

    [Avatar] => array(
      ['filename'] => array(
        [0] => array(
          'name' => '...',
          'tmp_name' => '...',
          ...
        ),
        [1] => array(
          'name' => '...',
          'tmp_name' => '...',
          ...
        ),
        [2] => array(
          'name' => '...',
          'tmp_name' => '...',
          ...
        ),
        [3] => array(
          'name' => '...',
          'tmp_name' => '...',
          ...
        )
      )
    )
    

    现在您需要通过简单的 foreach 更改您的行为。

    希望对你有所帮助。

    对不起我的英语:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-12
      • 2014-05-13
      • 2019-01-18
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多