2013-10-04 5 views
0

привет я делаю множественную загрузку файлов в Yii ...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)); 
} 

но это происходит внутри, если цикл, только если я использую Multiple виджет загрузки файла ... (если ($ _ POST [ «Uploadimage»])

он работает отлично с одной загрузки файла (как показано ниже) и загрузки также ..., но это показывает проблему множественной загрузки файлов ..

<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> 

я не то, что происходит не так с моим кодом ... я имею в виду this post

ответ

0

Для лучшего многократного загрузки файлов, его лучше использовать это расширение http://www.yiiframework.com/extension/xupload/, который использует http://blueimp.github.com/jQuery-File-Upload. По умолчанию многопользовательская загрузка yii также использует плагин jquery, но xupload кажется более эффективным. Это сработало для меня

0

У меня была такая же проблема, и выяснилось, что только наличие виджета MultiFileUpload, указанного в форме, каким-то образом не создает объект $ _POST? Как только я добавил второе поле ввода, все работало, как ожидалось.

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, 
    )); 
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)); 
    } 
Смежные вопросы