1

我正在使用 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));
}
4

2 回答 2

2

我发现 Yii 的文件验证系统的 mimeType 检查部分有点问题(或者至少是喜怒无常的 ;-)。您可能会遇到许多故障,但这与我之前看到的错误不同。

根据@PeterM 的评论,看起来您的临时文件确实无法找到,这意味着很难完成对其的验证。如果您禁用 mimeType 验证,然后在上传文件时重命名文件(以便您知道它应该在哪里),您的文件最终会被上传吗?

最好确保您的上传系统非常可靠,然后再添加 mimeType 验证。因为他们可能有点挑剔......

于 2013-07-05T15:40:39.723 回答
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));
}

希望这对其他人有所帮助。

于 2013-07-07T19:14:19.050 回答