我有一個(gè)圖片上傳api,冷啟動(dòng)上傳第一次就報(bào)錯(cuò),第二次往后就一切正常,如果停1-2小時(shí),再使用api上傳,又如此反復(fù)。
//公共上傳圖片
public function upload(Request $request)
{
//接受圖片文件
$file = $request->file('file');
//圖片類(lèi)型
$type = $request->post('type');
//檢驗(yàn)文件
if ($file && $file->isValid()) {
//保存目錄
$dirPath = date('Ymd').'/'.time().mt_rand(10000000,99999999);
//保存目錄
$publicPath = public_path().'/files/'.$dirPath;
//圖片后綴
$extension = $file->getUploadExtension();
//移動(dòng)上傳文件
$file->move($publicPath.'.'.$extension);
//本地路徑
$filePath = $publicPath.'.'.$extension;
//壓縮后的路徑
$thumbnailPath = $publicPath.'-thumbnail.'.$extension;
//執(zhí)行壓縮圖片
$source = $filePath;//原圖片名稱(chēng)
$dst_img = $thumbnailPath;//壓縮后圖片的名稱(chēng)
$percent = 0.5; #原圖壓縮,不縮放,但體積大大降低
//實(shí)例化對(duì)象
(new \image\imgcompress($source,$percent))->compressImg($dst_img);
//檢測(cè)圖片是否違規(guī)(檢查壓縮圖)
$imgResult = $this->checkImage($dst_img);
//圖片正常
if($imgResult['errcode'] == 0){
//定義圖片保存文件名
$savePath = time().mt_rand(10000000,99999999).uniqid().'.png';
//將圖片傳到騰訊云(原圖不壓縮)
$local_path = $filePath;
//保存文件路徑
$server_key_name = '/upload/images/'.date("Ymd").'/'.date("YmdHis",time()).$savePath;//遠(yuǎn)程服務(wù)器存儲(chǔ)的名字
//如果存在圖片類(lèi)型
if(isset($type) && $type){
$server_key_name = '/upload/'.$type.'/'.date("Ymd").'/'.date("YmdHis",time()).$savePath;//遠(yuǎn)程服務(wù)器存儲(chǔ)的名字
}
//引入騰訊云cos
require './vendor/autoload.php';
$secretId = $this->secretId; //"云 API 密鑰 SecretId";
$secretKey = $this->secretKey; //"云 API 密鑰 SecretKey";改成自己的
$region = $this->region; //設(shè)置一個(gè)默認(rèn)的存儲(chǔ)桶地域
$cosClient = new \Qcloud\Cos\Client(
array(
'region' => $region,
'schema' => 'https', //協(xié)議頭部,默認(rèn)為http
'credentials'=> array(
'secretId' => $secretId ,
'secretKey' => $secretKey)
)
);
//定義圖片鏈接
$image_url = '';
//開(kāi)始上傳圖片
try {
$result = $cosClient->upload(
$bucket = $this->bucket, //請(qǐng)創(chuàng)建桶的時(shí)候 設(shè)置公共讀寫(xiě) 改成自己的
$key = $server_key_name,
$body = fopen($local_path, 'rb')
);
//刪除服務(wù)器圖片(原圖和縮略圖)
@unlink($filePath);
@unlink($thumbnailPath);
//請(qǐng)求成功,返回圖片存儲(chǔ)信息
$data = $result->toArray();
//存在圖片信息
if(isset($data['Location']) && isset($data['Key'])){
//上傳成功
$image_url = 'https://'.$data['Location'];
}else{
//上傳失敗
return json(['status' => 201,'msg' => '上傳錯(cuò)誤','data' => $data]);
}
} catch (\Exception $e) {
// 請(qǐng)求失敗
$upload_msg = $e->getMessage();
return json($upload_msg);
}
//圖片鏈接
$json = [
'status' => 200,
'msg' => '上傳成功',
'data' => [
'image_url' => $image_url
]
];
return json($json);
}else{
//刪除服務(wù)器圖片
@unlink($filePath);
@unlink($thumbnailPath);
return json(['status' => $imgResult['errcode'],'msg' => $imgResult['msg']]);
}
}else{
return json(['status' => 201,'msg' => '上傳圖片參數(shù)錯(cuò)誤']);
}
}
這里粘貼截圖
第二次正常
找到系統(tǒng)報(bào)錯(cuò)提示了,為啥第二次后續(xù)一切正常呢?
這里寫(xiě)具體的系統(tǒng)環(huán)境相關(guān)信息
不對(duì), 上傳圖片參數(shù)錯(cuò)誤圖是錯(cuò)的,不能誤導(dǎo)大家了, 我剛剛是瀏覽器打開(kāi)的, 不是那個(gè)問(wèn)題
"上傳圖片參數(shù)錯(cuò)誤" , 不是這個(gè)錯(cuò)誤!!! 我剛剛打開(kāi)方式不對(duì), 具體啥原因我還不知道, 各位大佬遇到此問(wèn)題沒(méi)?
冷啟動(dòng), 或者間隔1-2小時(shí)(具體沒(méi)精確, 大概隔一段時(shí)間30分鐘或者1小時(shí)), 上傳圖片第一次絕對(duì)爆紅錯(cuò)誤
程序員要會(huì)自己debug
1、有報(bào)錯(cuò)首先看報(bào)錯(cuò)信息,報(bào)錯(cuò)信息會(huì)告訴你為什么報(bào)錯(cuò)
2、如果服務(wù)端報(bào)錯(cuò)一般都有日志,看服務(wù)端日志,一般框架都在runtime/log下
3、沒(méi)有日志或者錯(cuò)誤信息,那就在服務(wù)端一行行return ,定位那句代碼有問(wèn)題
你發(fā)這么多沒(méi)有一個(gè)有價(jià)值的信息,別人根本沒(méi)辦法給你定位,只能自己來(lái)。除非你有具體的報(bào)錯(cuò)信息,別人還能大概猜測(cè)出來(lái)。
你自己模擬請(qǐng)求option,估計(jì)就是這個(gè)請(qǐng)求沒(méi)有寫(xiě)的參數(shù)到自己的業(yè)務(wù)報(bào)錯(cuò),
還有小黑子,開(kāi)庭,帶上你的webman