上传文件 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 错误

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

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案
  • 本地和服务器的系统是否一致
  • 本地与服务器的 Web 服务是不是一致的
  • 浏览器是否一致

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

5年前 评论
讨论数量: 10

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

5年前 评论

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

file

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

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

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

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

5年前 评论

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

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

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

5年前 评论

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

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

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

5年前 评论

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

5年前 评论

@24K大白羊

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

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

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

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

file

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

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

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

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

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