file-> getMimeType()始终使用Zend Framework返回application / octet-stream

时间:2010-03-03 18:51:00

标签: php zend-framework mime-types file-upload

我的文件表单元素非常简单:

$this->archivo = new Zend_Form_Element_File('archivo');
$this->archivo->setLabel('Archivo:')
        ->setRequired(true)
        ->setDestination(UPLOAD_PATH)
        ->addValidator('Count', false, 1)
        ->addValidator('Size', false, MAX_FILE_SIZE)
        ->addValidator('Extension', false, Application_Form_Multimedia_SubirArchivo::EXTENSIONES_PERMITIDAS);
$this->addElement($this->archivo);

但是,当上传文件(上传OK)时,我尝试获取MIME类型,但每个文件都是相同的:

$form->archivo->getMimeType()

无论我试图上传什么类型的文件,它总是会返回 application / octet-stream

为什么会发生这种情况,我是否错过了某种方式?感谢

3 个答案:

答案 0 :(得分:4)

最可能的原因是,如果您的PHP安装中没有fileinfo或mime_magic扩展,则您使用的基础方法将回退到默认的mimetype:

if (empty($result[$key])) {
    $result[$key] = 'application/octet-stream';
}

建议您检查Zend_File_Transfer_Adapter_Abstract中的getMimeType()方法 - 其中该片段来自Zend_Form_Element_File :: getMimeType()中的内容,以获取详细信息,然后检查已安装的扩展并进行相应的纠正。

答案 1 :(得分:3)

今天Zend Framework是1.11.10,并且该问题的解决方案没有从ZF2向后移植。这是bug report

here is the patch。补丁的想法是在php5.3 mimefile包含在php中,我们不再需要外部文件。

另外,要使用此修复程序,您应该添加如下验证程序:

$upload->addValidator('IsImage', false, array('magicfile'=>false));

答案 2 :(得分:0)

Octet-Stream通常是必须在另一个应用程序中打开的任何文件。参见:

http://kb.iu.edu/data/agtj.html

  

包含内容的MIME附件   类型“application / octet-stream”是一个   二进制文件。通常,它将是一个   申请或必须的文件   在应用程序中打开,例如   电子表格或文字处理器。如果   附件有文件扩展名   与之相关,你或许可以   告诉它是什么类型的文件。一个.exe   例如,扩展名表示它   是Windows或DOS程序   (可执行文件),而文件以。结尾   .doc可能意味着打开   Microsoft Word。