我有一个图片上传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;
//执行压缩图片
$source = $filePath;//原图片名称
$dst_img = $thumbnailPath;//压缩后图片的名称
$percent = 0.5; #原图压缩,不缩放,但体积大大降低
//实例化对象
(new \image\imgcompress($source,$percent))->compressImg($dst_img);
//检测图片是否违规(检查压缩图)
$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', //协议头部,默认为http
'credentials'=> array(
'secretId' => $secretId ,
'secretKey' => $secretKey)
)
);
//定义图片链接
$image_url = '';
//开始上传图片
try {
$result = $cosClient->upload(
$bucket = $this->bucket, //请创建桶的时候 设置公共读写 改成自己的
$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' => '上传图片参数错误']);
}
}
这里粘贴截图
第二次正常
找到系统报错提示了,为啥第二次后续一切正常呢?
这里写具体的系统环境相关信息
不对, 上传图片参数错误图是错的,不能误导大家了, 我刚刚是浏览器打开的, 不是那个问题
"上传图片参数错误" , 不是这个错误!!! 我刚刚打开方式不对, 具体啥原因我还不知道, 各位大佬遇到此问题没?
冷启动, 或者间隔1-2小时(具体没精确, 大概隔一段时间30分钟或者1小时), 上传图片第一次绝对爆红错误
程序员要会自己debug
1、有报错首先看报错信息,报错信息会告诉你为什么报错
2、如果服务端报错一般都有日志,看服务端日志,一般框架都在runtime/log下
3、没有日志或者错误信息,那就在服务端一行行return ,定位那句代码有问题
你发这么多没有一个有价值的信息,别人根本没办法给你定位,只能自己来。除非你有具体的报错信息,别人还能大概猜测出来。
你自己模拟请求option,估计就是这个请求没有写的参数到自己的业务报错,
还有小黑子,开庭,带上你的webman
所有api都这样, 数据请求api同样如此, 冷启动 ERR_CONNECTION_RESET
做断点看一看是那一步的问题
我怀疑是上传云盘的问题