我正在使用Yii上传一些文件。而且我收到以下错误。
finfo_file() [<a href='function.finfo-file'>function.finfo-file</a>]: File or path not found 'C:\xampp\tmp\phpF48A.tmp'
我不确定这是什么,我已经读过这个主题,我不确定我有magic.mime数据库,我需要得到它并配置它吗?或者由于其他原因导致的问题。这是我第一次使用Yii,所以我不确定这只是配置问题还是什么。这是堆栈:
if($this->mimeTypes!==null)
221 {
222 if(function_exists('finfo_open'))
223 {
224 $mimeType=false;
225 if($info=finfo_open(defined('FILEINFO_MIME_TYPE') ? FILEINFO_MIME_TYPE : FILEINFO_MIME))
226 $mimeType=finfo_file($info,$file->getTempName());
227 }
任何帮助,非常感谢。要添加,文件将保存在正确的目录中,但它的记录不会保存在数据库中。
由于
强尼
更新了代码
模型
array('file', 'file', 'allowEmpty' => false, 'maxSize'=> 512000, 'maxFiles'=> 1,
'mimeTypes' => 'application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/rtf, text/plain',
控制器(几乎是默认的Gii代码)
public function actionCreate() {
$model = new File;
if (isset($_POST['File'])) {
$model->setAttributes($_POST['File']);
// Set file
$model->file = CUploadedFile::getInstance($model,'file');
// Set directory
$dest = Yii::getPathOfAlias('application.uploads');
$model->tmp_name = time();
$model->file->saveAs(($dest . '/' . $model->tmp_name . '.' . $model->file->extensionName));
if ($model->save()) {
} else {
$this->redirect(array('view', 'id' => $model->id));
}
}
$this->render('create', array( 'model' => $model));
}
答案 0 :(得分:2)
我发现Yii的文件验证系统的mimeType检查部分有点问题(或者至少是气质的;-)。您可能遇到许多故障,但这与我之前看到的错误不同。
Per @ PeterM的评论,看起来确实无法找到您的临时文件,这意味着很难完成验证。如果您禁用mimeType验证,然后将文件重命名为上传文件(以便知道它应该在哪里),您的文件最终会上传吗?
最好确保您的上传系统非常可靠,然后再添加mimeType验证。因为他们可能有点挑剔......
答案 1 :(得分:1)
我不确定为什么或这有什么问题。我只能显示最终的代码似乎工作得很好(除了我还没有对.docx上传进行排序。但所有其他类型的上传都很好)。
<强>型号:强>
array('file', 'file', 'on' => 'insert', 'maxSize'=> 512000, 'maxFiles'=> 1,
'mimeTypes' => 'application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/rtf, text/plain',
'tooLarge'=> 'File cannot be larger than 500KB.',
'wrongType'=> 'Format must be:<code>.doc</code>, <code>.docx</code>, <code>.txt</code>, <code>.rtf</code>'),
<强>控制器:强>
public function actionCreate() {
$model = new File;
if (isset($_POST['File'])) {
$model->setAttributes($_POST['File']);
// Set file
$model->file = CUploadedFile::getInstance($model,'file');
// Set directory
$dest = Yii::getPathOfAlias('application.uploads');
$model->tmp_name = time();
$model->file_type = $model->file->type;
$model->file_size = $model->file->size;
if ($model->save()) {
$model->file->saveAs(($dest . '/' . $model->tmp_name . '.' . $model->file->extensionName));
$this->redirect(array('view', 'id' => $model->id));
}
}
$this->render('create', array( 'model' => $model));
}
希望对别人有所帮助。