上传失败的时候 $_FILES['file']['type']是application/octet-stream 然后ecshop报图片类型不正确
后来做了一层简单的图片类型转换
if ($_FILES['file']['type'] == 'application/octet-stream') {
$imagesize = getimagesize($_FILES['file']['tmp_name']);
if ($imagesize['mime']) {
$_FILES['file']['type'] = $imagesize['mime'];
} else {
if (isset($_POST['type'])) {
$_FILES['file']['type'] = $_POST['type'];
} else {
$file_type = explode('.', $_FILES['file']['name']);
$_FILES['file']['type'] = file_type_translate(end($file_type));
}
}
}
/**
* 通过图片文件后缀获取图片类型
* @param string $file_type 图片文件后缀
* @return string
*/
function file_type_translate($file_type)
{
switch ($file_type) {
case 'jpg':
return 'image/jpeg';
break;
case 'png':
return 'image/png';
break;
case 'gif':
return 'image/gif';
break;
default:
return $file_type;
break;
}
}
发现JPG格式的图片可以上传了(其实JPG格式的并非真正完全上传成功 而是测试图片的文件大小大于512k较少 丢失内容并不多) png的还是上传失败
第二天又收到反馈 部分JPG格式的 上传后 下面一部分是灰色的 图片不完整丢失了一部分
然后具体看上传后有问题的图片
2020-06-12T11:13:05+08:00 Array
(
[file] => Array
(
[name] => 主图-4.jpg
[type] => application/octet-stream
[tmp_name] => /tmp/phpHZjB04
[error] => 0
[size] => 524288
)
)
发现传过来的 $_FILES['file']['type']依然是application/octet-stream size是524288 (524288/1024=512)
前一天有看到admin/js/diyUpload.js文件里的切片那块儿 由于要忙其它事情 jpg格式的可以上传 不影响使用 png格式也就暂时先不管了
// 开起分片上传。 thinkphp的上传类测试分片无效,图片丢失;
chunked:true,
// 分片大小
chunkSize:512 * 1024,
把admin/js/diyUpload.js文件里chunkSize:512 * 1024, 改为chunkSize:5120 * 1024, 或者chunked:true,改为chunked:false,
发现上传的图片完整的 png的大图也可以正常上传 切片调大 上传过来的$_FILES['file']['type']也是对应的image/jpeg或者image/png了
通过这个问题 也发现jpg格式的图片和png图片格式的存储方式是不一样的 jpg文件应该是从上到下存储图片内容的 可以丢失一部分 而png的就不行了 图片文件要完整