尝试获取 docx 文件上的 mime 类型会导致 application/octet-stream

问题描述 投票:0回答:2

我正在尝试验证 Laravel 上的文件上传(仅限 docx),但它一直失败。经过一番研究后,它归结为

$request->file('file')->getMimeType()
mime_content_type($request->file('file')->path())
返回
application/octet-stream

我检查的所有其他类型都返回正确的 mime 类型,问题仅出在 docx 上。该网站在 apache2 上运行。

是否可以设置系统以正确识别 docx 文件?如果可能的话,它是否可靠,或者我应该放弃它并使用 PhpWord 之类的东西制作一个 docx 验证器?

谢谢!

php mime-types docx
2个回答
1
投票

内容类型为“application/octet-stream”的 MIME 附件是二进制文件。通常,它是一个应用程序或必须在应用程序中打开的文档。


0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.