我正在尝试验证 Laravel 上的文件上传(仅限 docx),但它一直失败。经过一番研究后,它归结为
$request->file('file')->getMimeType()
和 mime_content_type($request->file('file')->path())
返回 application/octet-stream
。
我检查的所有其他类型都返回正确的 mime 类型,问题仅出在 docx 上。该网站在 apache2 上运行。
是否可以设置系统以正确识别 docx 文件?如果可能的话,它是否可靠,或者我应该放弃它并使用 PhpWord 之类的东西制作一个 docx 验证器?
谢谢!
内容类型为“application/octet-stream”的 MIME 附件是二进制文件。通常,它是一个应用程序或必须在应用程序中打开的文档。
Is it possible to set the system up to properly identify docx files? And if possible is it reliable at all or should I drop it and make a docx validator using something like PhpWord?
Laravel 使用 Symfony,而 Symfony 有一个 mime 类型的猜测器,它使用
file
命令:查看 Symfony 源代码(浏览器发送的 mime 类型不安全,因此它会尝试猜测)。对于某些 docx/xlsx/etc 文件,file
无法猜测 docx 的类型(因此返回 application/octet-stream)。
您可以通过手动将文件放在服务器上,然后通过运行
file --mime-type path/tofile
检查其猜测的 mime 类型来验证这一点
file 命令使用您系统的魔法数据库(通常在
/etc/magic
,您可以通过键入 file --version
找到您的魔法数据库在哪里)。
解决方法是更新您的系统,以便您拥有更新版本的
file
和魔法数据库,或者编辑您的 /etc/magic
文件,以便包含以下文件的内容:https://github.com/文件/文件/blob/master/magic/Magdir/msooxml