上傳失敗的時候 $_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的就不行了 圖片文件要完整