setName('wework_upload_oss') ->setDescription('企业微信聊天文件上传OSS'); } protected function execute(Input $input, Output $output) { Log::close(NULL); // 关闭日志 $output->writeln("企业微信聊天文件上传OSS开始:" . date('Y-m-d H:i:s')); $list = WeworksingleChatFile::where('is_local', '=', 1)->order('id asc')->select()->toArray(); if (count($list) > 2) { $do_list = array_slice($list, 0, 2); } else { $do_list = $list; } foreach ($do_list as $k => $v) { $path = public_path() . $v['path']; // 文件不存在直接结束 if (!file_exists($path)) { continue; } $chat_record = WeworksingleChatRecord::where('msgid', '=', $v['msgid'])->findOrEmpty(); if ($chat_record->isEmpty()) { continue; } $company_id = $chat_record['company_id']; if ($company_id) { $osspath = 'chat_file/' . $company_id . '/' . date('Ymd') . '/' . $v['filename']; } else { $osspath = 'chat_file/nocompany/' . date('Ymd') . '/' . $v['filename']; } $res = $this->ossUpload($osspath, $path); if ($res) { $save = ['is_local'=> 0, 'oss_path'=> $osspath]; WeworksingleChatFile::where('id', '=', $v['id'])->save($save); @unlink($path);//删除本地文件 $local_path = public_path() . 'weworksingle_file/' . $company_id . '/' . date('Ymd'); @rmdir($local_path);//删除空文件夹 } // amr 格式文件也上传 if ($chat_record['msgtype'] == 'voice') { $path = public_path() . $v['other_path']; $osspath = 'chat_file/' . $company_id . '/' . date('Ymd') . '/' . $v['other_file']; $res = $this->ossUpload($osspath, $path); if ($res) { @unlink($path);//删除本地文件 $local_path = public_path() . 'weworksingle_file/' . $company_id . '/' . date('Ymd'); @rmdir($local_path);//删除空文件夹 } } $output->writeln("企业微信聊天文件上传OSS处理完成:" . $v['id']); } $output->writeln("企业微信聊天文件上传OSS结束: " . date('Y-m-d H:i:s')); } /* * oss文件上传 */ private function ossUpload($path, $file) { $accessKeyId = config('app.wework_ali_oss_access_key_id'); $accessKeySecret = config('app.wework_ali_oss_access_key_secret'); $endpoint = config('app.wework_ali_oss_end_point'); $bucket = config('app.wework_ali_oss_bucket'); $oss = new OssClient($accessKeyId, $accessKeySecret, $endpoint); try { $oss->uploadFile($bucket, $path, $file); } catch (OssException $e) { Log::record($e)->save(); return false; } return true; } /* * oss检测文件 */ private function ossCheck($file) { $accessKeyId = config('app.wework_ali_oss_access_key_id'); $accessKeySecret = config('app.wework_ali_oss_access_key_secret'); $endpoint = config('app.wework_ali_oss_end_point'); $bucket = config('app.wework_ali_oss_bucket'); $oss = new OssClient($accessKeyId, $accessKeySecret, $endpoint); try { $exist = $oss->doesObjectExist($bucket, $file); return $exist; } catch (OssException $e) { return false; } } }