2012-01-17 96 views
0

你好我正在用Yii做文件上传。我已经实现这种方式,它工作得很好:用Ajax调用Yii文件上传?

查看:

echo CHtml::form($this->createUrl('uploadreport'), 'post', array('enctype'=>'multipart/form-data')); 
<div id="div_upload" class="row" style="display:none"> 
    <?php 
    $this->widget('CMultiFileUpload',array(
     'name'  => 'files', 
     'accept'  => 'doc|docx', 
     'max'   => 1, 
     'htmlOptions' => array('size' => 25), 
    )); 

    echo CHtml::submitButton('Upload'); 
    ?> 
</div> 

控制器:

if (isset($_FILES['files'])) { 
    $tmp_name = $_FILES['files']['tmp_name'][0]; 
    $filename = $_FILES['files']['name'][0]; 
    $new_url = '/home/ivan/reports/'.$filename; 

    // Upload file 
    move_uploaded_file($tmp_name, $new_url); 

    $calc_id = $_POST['calc_id']; 

    // Check if there is a previous report 
    $report = Report::model()->findByAttributes(array('calc_id'=>$calc_id)); 
    if (isset($report)) { 
     // If there is a previous report, delete it 
     $qtxt = "DELETE FROM `tbl_reports` WHERE `calc_id` LIKE '$calc_id';"; 
     $exec = Yii::app()->db->createCommand($qtxt)->execute(); 
    } 

    // Insert the new report 
    $rep_add = new Report; 
    $rep_add->calc_id = $calc_id; 
    $rep_add->report_url = $new_url; 
    $rep_add->save(); 
} 

正如你可以看到在我看来,我使用CHtml::submitButton。但我想,而不是使用:

echo CHtml::button(
    'Upload Report', array(
     'ajax' => array(
      'type' => 'POST', 
      'url' => CController::createUrl('Calculator/uploadReport'), 
     ) 
    ) 
); 

但是,如果使用上面,然后在我的控制器$_FILES['files']自带空,或者如果我尝试CUploadedFile::getInstance();它返回一个空字符串。

我想使用ajax,因为我不想呈现任何其他视图我希望用户在他/她上传文件后保留在当前视图中。我如何使用Ajax或者我怎么可以停止当前视图的刷新时我使用CHtml::submitButton('Upload');

任何提示/帮助表示赞赏。

+0

阵列( '加密类型'=> '的multipart/form-data的')这条线应该是 'htmlOptions'= > array('enctype'=>'multipart/form-data') – 2012-01-17 14:07:30

+0

@JKS你的回答不正确,它给我一个语法错误。 'echo CHtml :: form($ this-> createUrl('uploadreport'),'post','htmlOptions'=> array('enctype'=>'multipart/form-data'));' – ivantxo 2012-01-19 21:59:02

回答

1

我结束了使用EAjaxUpload扩展名。我认为在Yii中通过Ajax处理文件上传是不可能的。