Cakephp上传图片 - 无法确定mimetype

时间:2014-03-06 18:42:48

标签: cakephp file-upload wampserver cakephp-2.4

我的模型正在进行以下验证

'image' => array(
                'uploadErrror' => array(
               'rule' => 'uploadError',
                'message' => 'The image upload failed.',
                'allowEmpty'=> True
            ),
              'mimeType' => array(
                  'rule' => array('mimeType',array('image/gif','image/png','image/jpeg')),
                  'message' => 'Please only upload images (gif, png, jpg).',
                  'allowEmpty' => true
              ),
            'fileSize'=> array(
                'rule' => array('fileSize', '<=', '1MB'),
                'message' => 'Image must be less than 1MB.',
                'allowEmpty' => true
            ),
              'processImageUpload' => array(
                  'rule' => 'processImageUpload',
                  'message' => 'Unable to process image upload.',
                  'allowEmpty'=> true
              )  )


public function processImageUpload($check = array()){
        if(!is_uploaded_file($check['image']['tmp_name']))
        {
            return FALSE;
        }
        $targetdir = WWW_ROOT . 'img' . DS . 'uploads' . DS . $check['image']['name'];
        if(!move_uploaded_file($check['image']['tmp_name'],$targetdir))
        {
            return false;
        }
        $this->data[$this->alias]['image'] = 'uploads' . DS . $check['image']['name'];
        return true;
    }

我收到的错误如下,我也启用了调试2但没有提供进一步的说明。

  

无法确定mimetype。

我已尝试取消评论

  

延长= php_fileinfo.dll

并完全重新启动了WAMPServer,但它仍无效。

同样在控制器类中,我有以下代码用于添加

public function add() {
        if ($this->request->is('post')) {
            $this->Image->create();
                        $data =  $this->request->data['Image'];
                        if (!$data['image']['name'])
                        {
                            $this->Session->setFlash(__('There was no image provided.'));
                        }
            if ($this->Image->save($data)) {
                $this->Session->setFlash(__('The image has been saved.'));
                return $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The image could not be saved. Please, try again.'));
            }
        }
    }

添加查看代码

<?php echo $this->Form->create('Image',array('type'=>'file')); ?>
    <fieldset>
        <legend><?php echo __('Add Image'); ?></legend>
    <?php
        echo $this->Form->input('description');
        echo $this->Form->input('image',array('type'=>'file'));
        echo $this->Form->input('property_id');
    ?>
    </fieldset>
<?php echo $this->Form->end(__('Submit')); ?>

任何建议都将不胜感激。

4 个答案:

答案 0 :(得分:1)

不确定这是否是整个问题,但是:

'mimeType' => array(
             'rule' => array('mimeType',array('image/gif','image/png','image/jpeg')),
             'message' => 'Please only upload images (gif, png, jpg).',
             'alllowEmpty' => true
         ),

'alllowEmpty'有3个L'。

答案 1 :(得分:0)

没有检查mime而只是扩展的关闭解决方案是

$ext = substr(strtolower(strrchr($check['image']['name'], '.')), 1); //get the extension
$arr_ext = array('jpg', 'jpeg', 'gif'); //set allowed extensions

if (in_array($ext, $arr_ext)) {
   //upload code
}
 else
{
   return 'Please only upload images (gif, png, jpg).';
}

答案 2 :(得分:0)

一般情况下,Cake希望找到要在原始位置指定的位置检查的文件

$this->data[$this->alias]['image']['tmp_name'] // or whatever is the name of the field
验证期间

因此请确保...['tmp_name']指向有效位置(现有上传文件)。

原始回答:

我认为问题出在这里(我也有类似的问题):

$this->data[$this->alias]['image'] = 'uploads' . DS . $check['image']['name'];

移动上传的文件后,您将路径信息分配给$this->data[$this->alias]['image'],但CakePHP认为有一个数组包含有关上传文件的所有信息。这就是整个验证失败的原因。

具体来说,CakePHP将尝试在tmp_name中查找$this->data[$this->alias]['image'],但它不会在那里找到它,之后它将尝试确定mime类型为“nothing”并且它将失败

答案 3 :(得分:0)

将文本; extension = php_fileinfo.dll 更改为 php.ini 上的 extension = php_fileinfo.dll 这个对我有用。希望它能帮到你们。我正在使用xampp。