안녕하세요 저는 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를 사용하려면 어떻게해야합니까? 사용시 현재보기의 새로 고침을 중지하는 방법은 무엇입니까?
힌트/도움 감사.
배열 ('에 enctype'=> '다중/폼 데이터')이 라인은 'htmlOptions'= 수 있어야하는 데 도움이 매우 강력한 희망 > array ('enctype'=> 'multipart/form-data') –
@JKS 귀하의 대답은 틀리며, 구문 오류가 발생합니다. 'echo CHtml :: form ($ this-> createUrl ('uploadreport'), 'post', 'htmlOptions'=> 배열 ('enctype'=> 'multipart/form-data')); ' – ivantxo