【问题标题】:yii2 file upload not workingyii2文件上传不起作用
【发布时间】:2015-04-21 17:20:07
【问题描述】:

我已遵循以下指南https://github.com/yiisoft/yii2/blob/master/docs/guide/input-file-upload.md,但没有上传任何文件。以下是我的配置

_form

这是在一个 for 循环中,所以我可以得到一个不同记录的数组。

<?= $form->field(new UploadForm , "[$count]file")->fileInput()->label(false) ?>

查看

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>...

控制器

if(isset(Yii::$app->request->post()['Factsheets'])){

                for($i=0 ; $i < count(Yii::$app->request->post()['Factsheets']); $i++) {
                    //Yii::error(print_r(Yii::$app->request->post()['Factsheets'][$i],true));

                    if(!empty(Yii::$app->request->post()['UploadForm'][$i]['file'])){
                        $file = new UploadForm();
                        $file->file = UploadedFile::getInstance(Yii::$app->request->post()['UploadForm'][$i], 'file');

                        if ($file->file && $file->validate()) {
                            $file->file->saveAs('uploads/' . $file->file->baseName . '.' . $file->file->extension);
                        }
                    }
                }               
            }

发布日志

[Factsheets] => Array
    (
        [0] => Array
            (
                [type] => image
                [factsheet_id] => 1185
                [path] => ../public/filespool/2/289/Pelotas_Reprocessing.jpg
            )

        [1] => Array
            (
                [type] => tech_paper
                [factsheet_id] => 1433
                [path] => ?basin=pelotas
            )

        [2] => Array
            (
                [type] => factsheet
                [factsheet_id] => 1844
                [path] => ../public/filespool/2/289/Pelotas_Reprocessing.pdf
            )

    )

[UploadForm] => Array
    (
        [0] => Array
            (
                [file] => 
            )

        [1] => Array
            (
                [file] => 
            )

        [2] => Array
            (
                [file] => 
            )

    )

我现在在帖子日志中注意到以下内容。如何构建它?

$_FILES = [
    'UploadForm' => [
        'name' => [
            0 => [
                'file' => 'Destin_Dome.jpg'
            ]
            1 => [
                'file' => ''
            ]
            2 => [
                'file' => 'Pelotas_Reprocessing.pdf'
            ]
        ]
        'type' => [
            0 => [
                'file' => 'image/jpeg'
            ]
            1 => [
                'file' => ''
            ]
            2 => [
                'file' => ''
            ]
        ]
        'tmp_name' => [
            0 => [
                'file' => '/tmp/phpoPgbJ9'
            ]
            1 => [
                'file' => ''
            ]
            2 => [
                'file' => ''
            ]
        ]
        'error' => [
            0 => [
                'file' => 0
            ]
            1 => [
                'file' => 4
            ]
            2 => [
                'file' => 1
            ]
        ]
        'size' => [
            0 => [
                'file' => 1129373
            ]
            1 => [
                'file' => 0
            ]
            2 => [
                'file' => 0
            ]
        ]
    ]
]

似乎验证失败,但我能够制作如下副本:

if(!empty($_FILES['UploadForm']['tmp_name']['file'])){
                        copy($_FILES['UploadForm']['tmp_name']['file'],"/tmp/".$_FILES['UploadForm']['name']['file']);
}

文件上传模型

public $file;
    public $image;
    public $factsheet;


    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
            [['file'], 'file','maxFiles' => 10],
            [['image'], 'file','extensions' => 'gif, jpg'],
            [['factsheet'], 'file','checkExtensionByMimeType' => false,'extensions' => 'pdf'],
        ];
    }

【问题讨论】:

    标签: file-upload yii2


    【解决方案1】:

    我可能错了,但我认为问题出在您的控制器中:您的模型规则也适用于多个文件上传和表单字段,但在控制器中您将 $model-&gt;file 设置为单个 UploadedFile 实例。这就是为什么您的验证不起作用的原因。我无法提供您的建议(更改控制器或模型规则),因为我不清楚您在这里做什么。看起来您正在从单个文件上传字段创建多个模型...

    【讨论】:

    • 我正在尝试上传多个文件
    猜你喜欢
    • 2018-03-28
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2021-08-24
    • 2014-01-09
    相关资源
    最近更新 更多