2012-01-17 99 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處理文件上傳是不可能的。