2

我正在尝试使用 CakePHP 1.3 中的MeioUpload 行为来实现一些相当简单的图像上传,但我一辈子都无法让它工作。当我尝试保存$this->data在控制器中时,它会尝试保存常规文件数组(因为缺少更好的词),而不仅仅是文件名。

这就是我正在做的事情:

我已将 meio_upload.php 放入 /app/models/behaviors

在我的模型中,我正在执行以下操作:

var $actsAs = array(
    'MeioUpload.MeioUpload' => array(
        'filename' => array(
            'dir' => 'img{DS}upload{DS}brawlers',
            'allowedMime' => array('image/png'),
            'allowedExt' => array('.png', '.PNG'),
            'zoomCrop' => false,
            'thumbsizes' => array(
                'normal' => array(
                    'width' => 150,
                    'height' => 150
                )
            ),
            'default' => 'default.png',
            'length' => array(
                'minWidth' => 100,
                'minHeight' => 100,
                'maxWidth' => 150,
                'maxHeight' => 150
            )
        )                  
    )    
);

在我看来,我有以下表格:

<?php
echo $this->Form->create('Brawler', array('type' => 'file'));
echo $this->Form->input('name', array(
                                      'label' => 'Name',
                                      'maxLength' => '45'
                                      )
                        );
echo $this->Form->input('comment', array(
                                         'label' => 'Description',
                                         'rows' => '3'
                                         )
                        );
echo $this->Form->input('author', array(
                                        'label' => 'Your name)',
                                        'maxLength' => '45'
                                        )
                        );
echo $this->Form->input('email', array(
                                       'label' => 'Email (will not be shown)',
                                       'maxLength' => '45'
                                       )
                        );
echo $this->Form->input(
                        'filename',
                        array(
                              'between'=>'<br />',
                              'type'=>'file',
                              'label' => 'Image (Max 2mb, 150x150 pixels, .png)'
                              )
                        );
echo $this->Form->end('Submit');
?>

最后,我在关联控制器中的添加操作如下所示:

function add() {
    if (!empty($this->data)) {
        $this->Brawler->create();

        if($this->Brawler->save($this->data)) {
            $this->Session->setFlash('The brawler has been saved', true);
             $this->redirect(array('action'=>'index'));
        } else {
            $this->Session->setFlash('The Brawler could not be saved. Please try again.', true);
            debug($this->data);
            debug($this->validationErrors);
            die();
            //$this->redirect(array('action'=>'add'));
        }
    }
}

为了后代,这是我的餐桌设计:

delimiter $$

CREATE TABLE `brawlers` (
  `id` int(11) NOT NULL,
  `name` varchar(45) NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `comment` text,
  `email` varchar(45) NOT NULL,
  `author` varchar(45) NOT NULL,
  `filename` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8$$

当我尝试提交表单时,这是我得到的输出:

app/controllers/brawlers_controller.php (line 37)
Array
(
    [Brawler] => Array
        (
            [name] => Viking
            [comment] => Herp. This is a description.
            [author] => Me
            [email] => me@gmail.com
            [filename] => Array
                (
                    [name] => 5.png
                    [type] => image/png
                    [tmp_name] => /storage/configuration/upload_tmp_dir/phpEF2okD
                    [error] => 0
                    [size] => 15863
                )

        )

)

app/controllers/brawlers_controller.php (line 37)

显然,当它尝试将数组保存到文件名字段时,这会失败。图像也永远不会保存在指定的上传目录中。似乎从未实际使用过 meioupload 行为。我怎样才能验证这一点?

你必须原谅我发布的大量代码,但我认为我向你展示一切比让你猜测我可能在做什么要好。如果有人能发现错误,那将节省我很多时间拉头发。

4

3 回答 3

1

嘿,我有你的查询的答案

那就是你必须使另一个变量说

$d1 并将 $this->date 数组复制到该数组中,如下所示

$d1['brawlers']['name'] = $this->data['brawlers']['name'];

你所有的变量

$d1['brawlers']['filename'] = $this->data['brawlers']['filename']['name'];

然后像 $this->brawlers->save($d1); 一样保存它

于 2011-04-04T11:02:11.960 回答
0

我遇到了同样的问题,您使用的 MeioUpload 版本与您的 Cake 版本不兼容。我最终使用了 MeioUpload 2.3 版。

于 2013-02-28T04:55:02.387 回答
0

不是PHP 人,但前段时间我不得不使用 CakePHP 和 Meio.Upload。AFAIK,您的数据库中需要 4 个字段用于图像:

  • 文件名(您可以在设置中更改此文件的名称)
  • 目录
  • 模仿类型
  • 文件大小

根据您的错误和数据库架构判断,我会说您缺少一些字段。

编辑: 查看文档

于 2011-04-04T11:19:14.090 回答