0

こんにちは、yii で複数のファイルをアップロードしています...

このように複数のファイルのアップロードを使用するようにフォームをセットアップしています...

myfrom.php

<?php
$form=$this->beginWidget('CActiveForm', array(
    'id'=>'topic-form',
    'enableAjaxValidation'=>false,
    'htmlOptions' => array('enctype' => 'multipart/form-data'), // ADD THIS
));
?>

<div class="row">
<?php
    $this->widget('CMultiFileUpload', array(
        'name' => 'imagepath',
        'model'=> $model,
        'id'=>'imagepath',
        'accept' => 'jpeg|jpg|gif|png', // useful for verifying files
        'duplicate' => 'Duplicate file!', // useful, i think
        'denied' => 'Invalid file type', // useful, i think
    ));
?>
    <div class="row buttons">
        <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
    </div>
</div>

<?php $this->endWidget(); ?>

私のコントローラーメソッドは次のようになります...

public function actionMultipleupload()
{
    $model= new Uploadimage();
    if(isset($_POST['Uploadimage']))
    {
        var_dump("inside if");
        //  $images = CUploadedFile::getInstancesByName('images');
    }

    var_dump("out side if");
    $this->render('multipleupload',array('model'=>$model));
}

しかし、複数のファイルアップロードウィジェットを使用している場合にのみ、if ループ内に入ります... (if($_POST['U​​ploadimage'])

単一ファイルのアップロード(以下に示す)とアップロードでも問題なく動作しています...しかし、複数のファイルのアップロードで問題が発生しています..

<div class="row">
    <?php echo $form->labelEx($model,'imagepath'); ?>
    <?php echo CHtml::activeFileField($model,'imagepath',array('size'=>60,'maxlength'=>500)); ?>
    <?php echo $form->error($model,'imagepath'); ?>
</div>

私は自分のコードで何が問題になっているのかわかりません...私はこの投稿を参照しています

4

5 に答える 5

1

私は問題を解決しました。サンプルコードを以下に配置します..

ページを見る

<div class="row"> <?php echo $form->labelEx($model,'image'); ?> <?php $this->widget('CMultiFileUpload', array( 'model'=>$model, 'name'=>'image', 'attribute'=>'image', 'accept'=>'jpg|gif|png', 'max'=>4, 'remove'=>'Remove Image ', 'duplicate'=>'Already Selected', )); ?> <?php echo CHtml::submitButton($model->isNewRecord ? 'Upload' : 'Save'); ?>

コントローラ

$model=new Imgtable;
    // Uncomment the following line if AJAX validation is needed
     $this->performAjaxValidation($model);
    Yii::log("actionCreate actionCreate "  .isset($_POST['Imgtable']));   
    if(isset($_POST['Imgtable']))
    {
        $model->attributes=$_POST['Imgtable'];
        Yii::log("actionCreate actionCreate inside if"  .isset($_POST['Imgtable']));   
        $images = CUploadedFile::getInstancesByName('image');
        Yii::log("actionCreate actionCreate inside if"  .count($images));   
        if(isset($images) && count($images)> 0)
        {
            foreach ($images as $image=>$pic)
            {
                if ($pic->saveAs(Yii::getPathOfAlias('webroot').'/images/'.$pic->name,0777))    
                {   
                     $model=new Imgtable;
                    //$file = CUploadedFile::getInstance($model,'binaryfile');
                    $model->fileName = $pic->name;
                    $model->fileType = $pic->type;
                    $url = Yii::getPathOfAlias('webroot').'/images/';
                    Yii::log("actionCreate actionCreate inside if if"  .$pic->name);
                    $fp = fopen($url.$pic->name, 'r');
                    $content = fread($fp, filesize($url.$pic->name));
                    fclose($fp);
                    $model->binaryfile = $content;
                    $mode = new Productdata; 
                    $last_invoice = Productdata::model()->find(array('order'=>'id DESC'));
                    $last_invoice_number = str_replace("INV:", "", $last_invoice->id);
                    $new_invoice_number = $last_invoice_number;
                    $model->product_id = $new_invoice_number;


                    //$model->setIsNewRecord(true);
                    //$model->id = null;
                   // $model->image = $pic->name;
                    $model->insert();
                }               
            }
                    $this->redirect(array('view','id'=>$model->id));
        }
    }

    $this->render('create',array(
        'model'=>$model,
    ));
于 2014-01-06T07:18:35.227 に答える
1

コントローラーで $_POST を変更すると思います

$images = CUploadedFile::getInstancesByName('imagepath');

また、マルチアップロードで動作します。ここで私のチュートリアルを参照して ください http://www.dukaweb.net/2013/12/how-to-do-multiupload-images-in-yii.html

于 2014-01-06T09:08:05.723 に答える
0

ファイルの複数アップロードを改善するには、http://blueimp.github.com/jQuery-File-Upload を使用するこの拡張機能http://www.yiiframework.com/extension/xupload/使用することをお勧めします。ファイルのアップロードも jquery プラグインを使用しますが、xupload の方が効果的です。それは私のために働いた

于 2013-10-04T14:58:21.270 に答える
0
//100% working code
//In View
<?php
    $form=$this->beginWidget('CActiveForm', array(
        'id'=>'topic-form',
        'enableAjaxValidation'=>false,
        'htmlOptions' => array('enctype' => 'multipart/form-data'), // ADD THIS
    ));
    ?>

    <div class="row">
    <?php
        $this->widget('CMultiFileUpload', array(
            'attribute' => 'imagepath',
            'model'=> $model,
            'id'=>'imagepath',
            'accept' => 'jpeg|jpg|gif|png', // useful for verifying files
            'duplicate' => 'Duplicate file!', // useful, i think
            'denied' => 'Invalid file type', // useful, i think
        ));
    ?>
        <div class="row buttons">
            <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
        </div>
    </div>

    <?php $this->endWidget(); ?>

    //In Controller
    public function actionMultipleupload()
    {
        $model= new Uploadimage;
        if(isset($_POST['Uploadimage']))
        {
            $model->attributes = $_POST['Uploadimage'];
            $photos = CUploadedFile::getInstancesByName('Uploadimage[imagepath]');
            // proceed if the images have been set
                if (isset($photos) && count($photos) > 0) {

                    // go through each uploaded image
                    foreach ($photos as $image => $pic) {

                        if ($pic->saveAs(Yii::getPathOfAlias('webroot').'/path-to-image-folder/'.$pic->name)) {
                            // add it to the main model now
                            $img_add = new Uploadimage;
                            $img_add->filename = $pic->name; //it might be $img_add->name for you, filename is just what I chose to call it in my model
                            $img_add->topic_id = $model->id; // this links your picture model to the main model (like your user, or profile model)

                            $img_add->save(); // DONE
                        }
                        else{
                            echo 'Cannot upload!'
                        }
                    }
                }

                if ($model->save())
                    $this->redirect(array('view', 'id' => $model->id));
        }
        $this->render('multipleupload',array('model'=>$model));
    }
于 2015-10-06T06:33:27.220 に答える