我一直在尝试从这样的特定目录下载我上传的文件:
Yii::app()->request->SendFile($model->statement,
file_get_contents($path.$model->statement)
);
它识别文件并以正确的名称和格式下载它,但我得到的不是一个 74KB 的文件,而是一个 1KB 的损坏文件。试过其他文件如.doc、.pdf,还是一样。
我不完全确定 file_get_contents 实际上做了什么,因为我从我找到的一个例子中得到了这个。
要下载的文件以前是使用上传的
<div class="row">
<?php echo $form->labelEx($model, 'statement'); ?>
<?php echo $form->fileField($model, 'statement', array('size' => 36, 'maxlength' => 255)); ?>
<?php echo $form->error($model, 'statement'); ?>
</div>
在 _form.php 并调整控制器中的 actionCreate:
public function actionCreate($id)
{
$model=new Witness;
$model->ip_id = $id;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
$path = Yii::app()->basePath . '/modules/iris/statements';
if (!is_dir($path)) {
mkdir($path);
}
if(isset($_POST['Witness']))
{
$model->attributes=$_POST['Witness'];
if (@!empty($_FILES['Witness']['name']['statement'])) {
$model->statement = $_POST['Witness']['statement'];
if ($model->validate(array('statement'))) {
$model->statement = CUploadedFile::getInstance($model, 'statement');
} else {
$model->statement = '';
}
$model->statement->saveAs($path . '/' . time() . '_' . str_replace(' ', '_', strtolower($model->statement)));
//$model->doc_type = $model->statement->getType();
//$model->doc_size = $model->statement->getSize();
}
$model->statement = time() . '_' . str_replace(' ', '_', strtolower($model->statement));
if($model->save())
$this->redirect(array('ip/view','id'=>$model->ip_id));
}
$this->render('create',array(
'model'=>$model,
));
}
上传的文件可以毫无问题地打开。知道为什么下载损坏了吗?下载前是否必须先指定文件的类型/大小?