file->getMimeType() 总是使用 Zend 框架返回 application/octet-stream
Posted
技术标签:
【中文标题】file->getMimeType() 总是使用 Zend 框架返回 application/octet-stream【英文标题】:file->getMimeType() always returns application/octet-stream with Zend Framework 【发布时间】:2011-01-23 08:41:59 【问题描述】:我的文件表单元素很简单:
$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。
为什么会发生这种情况,我是不是错过了什么?谢谢
【问题讨论】:
【参考方案1】:Octet-Stream 通常是必须在另一个应用程序中打开的任何文件。见:
http://kb.iu.edu/data/agtj.html
包含内容的 MIME 附件 类型“应用程序/八位字节流”是 二进制文件。通常,它将是一个 申请或必须提交的文件 在应用程序中打开,例如 电子表格或文字处理器。如果 附件有文件扩展名 与它相关联,您也许可以 告诉它是什么类型的文件。一个.exe 例如,扩展名表示它 是 Windows 或 DOS 程序 (可执行文件),而文件结尾 .doc 可能意味着在 微软Word。
【讨论】:
【参考方案2】:最可能的原因是,如果您的 php 安装中的 fileinfo 或 mime_magic 扩展均不可用,那么您使用的底层方法将回退到默认的 mimetype:
if (empty($result[$key]))
$result[$key] = 'application/octet-stream';
建议您检查 Zend_File_Transfer_Adapter_Abstract 中的 getMimeType() 方法 - 该 sn-p 来自哪里,并从 Zend_Form_Element_File::getMimeType() 中调用 - 了解详细信息,然后检查您安装了哪些扩展并适当地纠正。
【讨论】:
【参考方案3】:今天 Zend Framework 是 1.11.10,这个问题的解决方案没有从 ZF2 向后移植。这里是bug report。
here is the patch。补丁的想法是在 php5.3 中 mimefile 包含在 php 中,我们不再需要外部文件。
此外,要使用此修复程序,您应该像这样添加验证器:
$upload->addValidator('IsImage', false, array('magicfile'=>false));
【讨论】:
好答案。我的问题肯定是过时的 ZF1Zend_Validate_File_MimeType
。喜欢删除代码行来解决问题。以上是关于file->getMimeType() 总是使用 Zend 框架返回 application/octet-stream的主要内容,如果未能解决你的问题,请参考以下文章
进度回调总是在jquery-file-upload插件中显示100%上传