【问题标题】:File fails to upload when using xety/cake3-upload plugin使用 xety/cake3-upload 插件时文件上传失败
【发布时间】:2015-12-12 17:52:03
【问题描述】:

我无法在 CakePHP 中将文件从一个文件夹上传到另一个文件夹。这是我的代码。

首先我加载了插件并将这段代码添加到ProductsTable.php

$this->addBehavior('Xety/Cake3Upload.Upload', [
    'fields' => [
        'productimg_file' => [
            'path' => 'uploads/avatar/:id/:md5'
        ]
    ]
]);

然后我添加了我的add.cpt

<?php
    echo $this->Form->input('productcode');
    echo $this->Form->input('productname');
    echo $this->Form->input('productprice');
    echo $this->Form->input('quantity');
    echo $this->Form->input('productdesc');
    echo $this->Form->input('productimg_file',['type' => 'file']);
?>

文件仍然没有移动到webroot 目录。

在此处输入代码 公共函数添加() {

    $product = $this->Products->newEntity();


    if ($this->request->is('post')) {

    $product = $this->Products->patchEntity($product, $this->request->data);

        if ($this->Products->save($product)) {
           $this->Flash->success(__('The product has been saved.'));
            return $this->redirect(['action' => 'index']);
        } else {
           $this->Flash->error(__('The product could not be saved. Please, try again.'));
        }
    }
    $this->set(compact('product'));
    $this->set('_serialize', ['product']);
}

【问题讨论】:

  • 它是否抛出任何错误?请编辑您的问题并添加您的 ProductsController::add() 操作和任何其他相关代码。

标签: cakephp cakephp-3.1 cakephp-3.x


【解决方案1】:

我已通过该插件成功上传。一开始,我是你的错误,但我修复了它。这是我的步骤...

在:CakePHP 3.2 Red Velvet

  1. 下载源 复制 UploadBehavior.php/src/Model/Behavior

  2. 复制"xety/cake3-upload": "1.*"(带双引号“”)粘贴到“require-dev”中的/config/bootstrap.php:{...},

例如:

"require-dev": {
        "psy/psysh": "@stable",
        "cakephp/debug_kit": "~3.2",
        "cakephp/bake": "~1.1",
        "xety/cake3-upload": "1.*"
    },
  1. 打开终端(window cmd)输入:

    作曲家更新

注意:如果你没有作曲家,谷歌并安装它。

=> 我知道数字 1 和 2 是一样的,但我肯定做到了。

  1. 配置为插件手册。 以下配置位于 Model/Table/model_nameTable.php 而不是 Model/Entity/model.php

例如:

$this->addBehavior('Xety/Cake3Upload.Upload', [
        'fields' => [
            'avatar' => [
                'path' => '/img/avatars/:id/:md5'
                    ]
                ]
            ]
        );
  1. 使用

    设置更新 URL

    '/img/folder_name/:id/:md5'

例如:

'/img/avatars/:id/:md5'
  1. 确保视图中的 FORM 定义为:

    $this->Form->create($user, ['enctype' => 'multipart/form-data'])

并且输入文件的名称正确:

$this->Form->file('fieldname_file');

例如:

$this->Form->file('avatar_file');

不需要从控制器调用任何东西,当你提交表单时,它会自动上传。

祝你好运!

【讨论】:

    【解决方案2】:

    您的观点似乎不完整。没有$this-&gt;Form-&gt;create()

    plugin instructions 提到您必须将表单设置为接受文件:

    $this->Form->create($foo, ['type'=>'file']);
    // .. or ..
    $this->Form->create($foo, ['enctype' => 'multipart/form-data']);
    

    默认情况下,上传内容存储在/app/webroot/img/ 下。确保此文件夹可由 Apache 或 Nginx 写入。

    【讨论】:

    • 是的,有 $this->Form->create 它只是我没有把它放在这里..而且我的 app 文件夹拥有所有权限
    【解决方案3】:

    _file 是一个默认后缀,您只能在 .ctp 文件中使用它。不在模型中。 改变你在模型中的行为。希望这会有所帮助。

    $this->addBehavior('Xety/Cake3Upload.Upload', [
        'fields' => [
            'productimg' => [
                'path' => 'uploads/avatar/:id/:md5'
            ]
        ]
    ]);
    

    【讨论】:

      猜你喜欢
      • 2016-06-14
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 2019-11-09
      • 2011-03-08
      • 2015-03-02
      • 2018-10-13
      相关资源
      最近更新 更多