【发布时间】:2012-01-17 02:31:26
【问题描述】:
您好,我正在使用 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,因为我不想渲染任何其他视图,我希望用户在上传文件后保留在当前视图中。使用CHtml::submitButton('Upload');时如何使用Ajax或者如何停止刷新当前视图
任何提示/帮助表示赞赏。
【问题讨论】:
-
array('enctype'=>'multipart/form-data') 这行应该是 'htmlOptions'=>array('enctype' => 'multipart/form-data')
-
@JKS 你的回答不正确,它给了我一个语法错误。
echo CHtml::form($this->createUrl('uploadreport'), 'post', 'htmlOptions'=>array('enctype'=>'multipart/form-data'));
标签: ajax file-upload yii reload