我的文件表单元素非常简单:
$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 。
为什么会发生这种情况,我是否错过了某种方式?感谢
答案 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。