上传文件 mimeType 错误

在本地上传一个 5m 大小 mp3 的音频文件,打印出 dump($request->file) UploadedFile 对象,如下所示。可以获得正确的 mimeType 。

上传文件 mimeType 错误

部署到服务器上之后,打印相同的 UploadedFile 对象,如下所示。不能获得正确的 mimeType 。可看到得到的是 application/octet-stream 类型,并不是预期的 audio/mp3 类型。

上传文件 mimeType 错误

百思不得其解,遂来请教则个。


解决问题之后补充的一个知识点:

本来早该想到是问题的原因是上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值,但是由于错误的测试方法,导致我一直认为不是该原因导致的。

使用 php –ini 命令得到的文件路径不一定是当前 php 所加载的配置文件,如下图所示,可以看到路径,这个配置文件并不是当前 php 所加载的。

上传文件 mimeType 错误

但是在 index.php 中,使用 echo phpinfo() 看到的配置文件的路径确实另一个。

上传文件 mimeType 错误

这两个方法得到的配置文件,路径不一致是为啥,有待研究。

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案
  • 本地和服务器的系统是否一致
  • 本地与服务器的 Web 服务是不是一致的
  • 浏览器是否一致

如果都一致 可以直接在 public/index.php 中打印 $_FILES 确认一下。

4年前 评论
讨论数量: 10

.mp3是文件的后缀名,octet-stream是媒体类型,称之为MIME类型,是一种标准,用来表示文档、文件或字节流的性质和格式。
octet-stream表明是某种二进制数据,浏览器一般不会自动执行或询问执行,只有正确设置了MIME类型的文件才能被 <video><audio> 识别和播放。

4年前 评论

@L学习不停 mp3 也是媒体类型

file

4年前 评论
L学习不停 4年前

@青风百里 补充更加完善,因为光看我的回复会被误导。 mp3也是媒体类型,属于子类型的细分。

我去看了一下相关资料,有这么一句二进制文件没有特定或已知的 subtype(子类型),即使用 application/octet-stream。在你的传输过程中发生了一些不知道的变化。

你是要做什么业务操作吗?

4年前 评论

是否是文件太大了,试试设置php.inipost_max_sizeupload_max_filesize到更大的值。

4年前 评论
  • 本地和服务器的系统是否一致
  • 本地与服务器的 Web 服务是不是一致的
  • 浏览器是否一致

如果都一致 可以直接在 public/index.php 中打印 $_FILES 确认一下。

4年前 评论

@L学习不停 就是一个简单的上传音频文件的业务。

//控制器中的一段代码
$request->validate([
    'file' => 'required|file|mimetypes:audio/mp3,audio/mpeg',
]);

如果媒体类型为 mp3 就可以通过检验,但是当我上传一个 mp3 文件,被识别为 application/octet-stream ,就无法通过校验。

4年前 评论

@tsin 我也怀疑可能是这个情况,但是我已经测试,把这两个值都调到了 100M ,依然无法解决问题。

4年前 评论

@24K大白羊

  • 本地和服务器的系统是否一致 [不一致]
  • 本地与服务器的 Web 服务是不是一致的 [不一致]
  • 浏览器是否一致 [一致]

本来应该要保持一致,但是由于是个人的项目,就没有用 docker ,目前是在 mac 上开发,部署到 linux 上,所以你所说的,确实会是一个因素。

4年前 评论
24K大白羊 4年前

@24K大白羊 多谢提醒,打印出 $_FILES 数组之后,才看到了问题的本质。

file

错误码为1,就代表了上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值,可参考手册

4年前 评论
24K大白羊 4年前

cli 和 fpm 模式加载的配置文件理应是不同的? :grin:

4年前 评论
ㅤㅤ (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!