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