多个文件上传并在yii2中保存数据库中的数据

时间:2015-07-09 13:28:12

标签: php yii2 image-uploading

当我在Yii2上传多个文件时,我收到以下错误,无法将数据插入数据库:

  

finfo_file(C:\ xampp \ tmp \ phpCACD.tmp):无法打开流:没有这样的   文件或目录

控制器文件:

public function actionGallery($id)
    {
        $model = new Gallery();
        if (Yii::$app->request->post()) {
            $model->imageFiles = UploadedFile::getInstances($model,'imageFiles');    
            foreach ($model->imageFiles as $file) {
                $imageName = Yii::$app->security->generateRandomString();
                $model->added_date = date('Y-m-d');
                $model->emp_id = $id;
                $file->saveAs('uploads/emp/' . $imageName . '.' . $file->extension);
                $originalFile = EMP_PROFILE_ORIGINAL.$imageName.'.'.$file->extension;
                $thumbFile = EMP_PROFILE_THUMB.$imageName.'.'.$file->extension;
                Image::thumbnail($originalFile, 200, 200)->save($thumbFile, ['quality' => 80]);
                $model->save();
            }
        }
        return $this->render('gallery', [
            'gal' => $model
            ]);
    }

查看文件:

<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\grid\GridView;
?>

<div class="posts-form">
    <div class="wrapper-md">
        <div class="row">
            <div class="col-sm-8">
                <div class="panel panel-default">
                    <div class="panel-body">

                        <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>
                        <?= $form->field($gal, 'imageFiles[]')->fileInput(['multiple' => true, 'accept' => 'image/*']) ?>
                        <div class="form-group">
                            <button class="btn btn-success">Submit</button>
                            <a class="btn btn-default" href="<?=\Yii::$app->urlManager->createUrl('post')?>">Cancel</a>
                        </div>
                        <?php ActiveForm::end(); ?>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

但我犯了错误。我无法找到解决方案。

4 个答案:

答案 0 :(得分:2)

首先,在模型中你必须有2个变量来保存图像及其名称。

`
* @property string $image_name
*/
class Gallery extends \yii\db\ActiveRecord
{
    **public $fileImage=[];**
    public static function tableName(){
`

在这种情况下,我使用的$ image_name是我的模型列之一,$ fileImage,$ fileImage是一个用于上传图像的数组,

:)

然后在控制器

$model = new Gallery(); // this variable is only used to check if everything is valid
if ($model->load(Yii::$app->request->post())) {
    $model->fileImage = UploadedFile::getInstances($model,'fileImage');
    $a=0;
    foreach ($model->fileImage as $file) {
        $a++;
        $model1 = new Gallery();
        $file->saveAs("images/test".$a.".".$file->extension);
        $model1->image_url="images/test.".$a.".".$file->extension;
        $model1->image_name = "".$a;

        $model1->save();
    }

    return $this->redirect(['index']);
} else {
    return $this->render('create', [
        'model' => $model,
    ]);
}

我认为这就是全部。 。

答案 1 :(得分:1)

您可以使用

-(void)run:(id)param {
    // do thread-safe things here
    @synchronized(syncObj) {
        // put your critical section here
    }
    // do more thread-safe things here
}

而不是$ model-&gt; save();

我做了一个例子, 所以控制器中的整个代码是:

$sql = 'INSERT INTO `table`(`id`, `col1`, `col2`, `path`) VALUES (Null,"'.($model2->col1).'","'.($model2->col2).'","'.($model2->path).'")';
                $command = \Yii::$app->db->createCommand($sql);
                $command->execute();

它对我有用。

修改:您还可以使用$ model2-&gt; save(false);它适用于我的情况。

答案 2 :(得分:0)

致电$model->save()

$model->file->saveAs();

我遇到了完全相同的问题

答案 3 :(得分:-1)

*我想您忘记创建uploads和emp文件夹,或者您使用错误的文件夹名称,请检查您的文件夹名称...

*如果要保存该文件的名称,则应使用不同的变量(两个变量)来保存图像和图像的名称,