【问题标题】:Images are not saved into the photo_dir folder using cakephp-upload plugin on CakePHP 3.2图像不会使用 CakePHP 3.2 上的 cakephp-upload 插件保存到 photo_dir 文件夹中
【发布时间】:2016-07-13 20:11:36
【问题描述】:

我正在使用cakephp-upload plugin,并设法将图像上传到我的服务器:

WorkersTable:

public function initialize(array $config)
{
    parent::initialize($config);

    $this->table('workers');
    $this->displayField('id');
    $this->primaryKey('id');

    $this->addBehavior('Josegonzalez/Upload.Upload', [
        'avatar' => [
            'fields' => [
                'dir' => 'photo_dir'
            ]
        ]
    ]);
}

view.ctp:

echo $this->Form->create($newWorker, ['type' => 'file']);
echo $this->Form->input('avatar', ['type' => 'file']);
echo $this->Form->input('photo_dir', ['type' => 'hidden']);

现在头像图片上传了,但是没有放到photo_dir子目录下。

我错过了什么?它在我的 CakePHP 2.8.x 应用程序中没有任何问题。

【问题讨论】:

  • 服务器上真的存在photo_dir吗?
  • photo_dir 是工人表中的一列。

标签: php cakephp cakephp-3.0 image-uploading


【解决方案1】:

插件的作者在这里。

fields.dir 属性没有说明子目录应该是什么。它是对数据库表中列的引用,我们应该将 director 保存到我们保存文件的位置。

如果您想更改在磁盘上保存文件的位置,您应该改用path 选项。这是我使用photo_dir 子目录的示例:

$this->addBehavior('Josegonzalez/Upload.Upload', [
    'avatar' => [
        'path' => 'webroot{DS}files{DS}{model}{DS}{field}{DS}photo_dir{DS}'
    ]
]);

path 选项的默认值为webroot{DS}files{DS}{model}{DS}{field}{DS}

【讨论】:

    【解决方案2】:

    不应该是:

    $this->addBehavior('Josegonzalez/Upload.Upload', [
         'avatar' => [
             'fields' => [
                 'dir' => 'avatar_dir'
             ]
         ]
     ]);
    
    echo $this->Form->input('avatar_dir', ['type' => 'hidden']);
    

    【讨论】:

      【解决方案3】:

      如果您想使用比Josegonzalez/Upload.Upload 插件更好的上传文件选项,可以使用下面的插件。

      我在我的项目中使用了以下一种。

      Utils Plugin for Cake 3.x
      

      此插件的链接:https://github.com/cakemanager/cakephp-utils

      文档:http://cakemanager.org/docs/utils/1.0/behaviors/uploadable/

      这是配置:

      $this->addBehavior('Utils.Uploadable', [
                  'image' => [
                      'path' => '{ROOT}{DS}{WEBROOT}{DS}uploads{DS}{field}{DS}',
                      'fileName' => md5(rand(1000, 5000000)) . '.{extension}',
                      'removeFileOnDelete' => true,
                      'removeFileOnUpdate' => FALSE
                  ],
              ]);
      

      您可以在此处对其进行自定义。如果您对此有任何疑问,请告诉我。

      【讨论】:

      • 你试过这个解决方案了吗?
      猜你喜欢
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多