2012-01-17 3 views
0

안녕하세요 저는 Yii와 파일 업로드를하고 있습니다. 나는이 방법을 구현하고 아주 좋은 작동합니다Yii 파일을 Ajax 호출로 업로드 하시겠습니까?

보기 :

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를 사용하려면 어떻게해야합니까? 사용시 현재보기의 새로 고침을 중지하는 방법은 무엇입니까?

힌트/도움 감사.

+0

배열 ('에 enctype'=> '다중/폼 데이터')이 라인은 'htmlOptions'= 수 있어야하는 데 도움이 매우 강력한 희망 > array ('enctype'=> 'multipart/form-data') –

+0

@JKS 귀하의 대답은 틀리며, 구문 오류가 발생합니다. 'echo CHtml :: form ($ this-> createUrl ('uploadreport'), 'post', 'htmlOptions'=> 배열 ('enctype'=> 'multipart/form-data')); ' – ivantxo

답변

1

EAjaxUpload 확장자를 사용했습니다. 나는 Yii에서 Ajax를 통한 파일 업로드를 처리 할 수 ​​없다고 생각합니다.

0

대신 CHtml :: ajaxSubmitButton()을 사용하십시오. 이것이 Ajax 제출을 수행하는 올바른 방법입니다. 여기에 문서를 확인하십시오 : http://www.yiiframework.com/doc/api/1.1/CHtml/#ajaxSubmitButton-detail 대신

+0

같은 오류. $ _FILES [ 'files']이 (가) 비어 있고 CUploadedFile :: getInstance(); 아무것도 반환하지 않습니다. – ivantxo

0

나는 아약스 액션을 통해 컨트롤러 동작을 호출 할 수 없습니다. 그래서 저는 Yii에서 불가능하다고 생각합니다. 나는이 확장자를 사용하여 끝냈다 :. Ajax로 파일 업로드를 수행한다.

관련 문제