目前通过iOS分片上传图片文件文件,fpm和Swoole保存的文件mime类型不一致
以下为上传保存文件的主要逻辑(断点续传)
iOS提交的数据:"file":"[object] (Illuminate\\Http\\UploadedFile: /tmp/swoole.upfile.a7PsRR)"
fpm的上传的图片分片为image/png
Swoole上传的分片为application/octet-stream
$data = file_get_contents($file);
$fp = fopen($fileInfo['filePath'], 'a');
flock($fp, LOCK_EX);
fwrite($fp, $data);
flock($fp, LOCK_UN);
fclose($fp);
系统版本:centos7.2
Swoole版本:4.2.7
php版本:7.1
iOS下会出现这个问题,感觉是服务器接收到的头信息不一致造成的。
麻烦排查验证下呢
https://github.com/swoole/swoole-src/issues/2025
iOS通过这种方式上传的
把Http原始的请求报文发给我们
应该是content-type引起的
这里客户端指定的Content-Type是什么就是什么
服务器如果是fpm的, $m = finfo_file(finfo_open(FILEINFO_MIME_TYPE), $file); 会是image/png。
Swoole下会是application/octet-stream
意思是正常的吗
fpm这个应该是读文件内容头的, PHP有相关函数可以做这个判断
Swoole:获取临时文件信息
$file = [object] (Illuminate\\Http\\UploadedFile: /tmp/swoole.upfile.a7PsRR)
$m = finfo_file(finfo_open(FILEINFO_MIME_TYPE), $file);
输出 application/octet-stream
fpm:获取临时文件信息
$file = [object] (Illuminate\\Http\\UploadedFile: /tmp/a7PsRR)
$m = finfo_file(finfo_open(FILEINFO_MIME_TYPE), $file);
输出 image/png
这不应该啊,代码里面并没有去读取header信息,而是直接读取上传的临时文件