你好我正在用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');
任何提示/帮助表示赞赏。
阵列( '加密类型'=> '的multipart/form-data的')这条线应该是 'htmlOptions'= > array('enctype'=>'multipart/form-data') – 2012-01-17 14:07:30
@JKS你的回答不正确,它给我一个语法错误。 'echo CHtml :: form($ this-> createUrl('uploadreport'),'post','htmlOptions'=> array('enctype'=>'multipart/form-data'));' – ivantxo 2012-01-19 21:59:02