WeworksingleUploadOss.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace app\command;
  3. use app\model\WeworksingleChatFile;
  4. use app\model\WeworksingleChatRecord;
  5. use OSS\Core\OssException;
  6. use OSS\OssClient;
  7. use think\console\Command;
  8. use think\console\Input;
  9. use think\console\Output;
  10. use think\facade\Log;
  11. class WeworksingleUploadOss extends Command
  12. {
  13. protected function configure()
  14. {
  15. $this->setName('wework_upload_oss')
  16. ->setDescription('企业微信聊天文件上传OSS');
  17. }
  18. protected function execute(Input $input, Output $output)
  19. {
  20. Log::close(NULL); // 关闭日志
  21. $output->writeln("企业微信聊天文件上传OSS开始:" . date('Y-m-d H:i:s'));
  22. $list = WeworksingleChatFile::where('is_local', '=', 1)->order('id asc')->select()->toArray();
  23. if (count($list) > 2) {
  24. $do_list = array_slice($list, 0, 2);
  25. } else {
  26. $do_list = $list;
  27. }
  28. foreach ($do_list as $k => $v) {
  29. $path = public_path() . $v['path'];
  30. // 文件不存在直接结束
  31. if (!file_exists($path)) {
  32. continue;
  33. }
  34. $chat_record = WeworksingleChatRecord::where('msgid', '=', $v['msgid'])->findOrEmpty();
  35. if ($chat_record->isEmpty()) {
  36. continue;
  37. }
  38. $company_id = $chat_record['company_id'];
  39. if ($company_id) {
  40. $osspath = 'chat_file/' . $company_id . '/' . date('Ymd') . '/' . $v['filename'];
  41. } else {
  42. $osspath = 'chat_file/nocompany/' . date('Ymd') . '/' . $v['filename'];
  43. }
  44. $res = $this->ossUpload($osspath, $path);
  45. if ($res) {
  46. $save = ['is_local'=> 0, 'oss_path'=> $osspath];
  47. WeworksingleChatFile::where('id', '=', $v['id'])->save($save);
  48. @unlink($path);//删除本地文件
  49. $local_path = public_path() . 'weworksingle_file/' . $company_id . '/' . date('Ymd');
  50. @rmdir($local_path);//删除空文件夹
  51. }
  52. // amr 格式文件也上传
  53. if ($chat_record['msgtype'] == 'voice') {
  54. $path = public_path() . $v['other_path'];
  55. $osspath = 'chat_file/' . $company_id . '/' . date('Ymd') . '/' . $v['other_file'];
  56. $res = $this->ossUpload($osspath, $path);
  57. if ($res) {
  58. @unlink($path);//删除本地文件
  59. $local_path = public_path() . 'weworksingle_file/' . $company_id . '/' . date('Ymd');
  60. @rmdir($local_path);//删除空文件夹
  61. }
  62. }
  63. $output->writeln("企业微信聊天文件上传OSS处理完成:" . $v['id']);
  64. }
  65. $output->writeln("企业微信聊天文件上传OSS结束: " . date('Y-m-d H:i:s'));
  66. }
  67. /*
  68. * oss文件上传
  69. */
  70. private function ossUpload($path, $file)
  71. {
  72. $accessKeyId = config('app.wework_ali_oss_access_key_id');
  73. $accessKeySecret = config('app.wework_ali_oss_access_key_secret');
  74. $endpoint = config('app.wework_ali_oss_end_point');
  75. $bucket = config('app.wework_ali_oss_bucket');
  76. $oss = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  77. try {
  78. $oss->uploadFile($bucket, $path, $file);
  79. } catch (OssException $e) {
  80. Log::record($e)->save();
  81. return false;
  82. }
  83. return true;
  84. }
  85. /*
  86. * oss检测文件
  87. */
  88. private function ossCheck($file)
  89. {
  90. $accessKeyId = config('app.wework_ali_oss_access_key_id');
  91. $accessKeySecret = config('app.wework_ali_oss_access_key_secret');
  92. $endpoint = config('app.wework_ali_oss_end_point');
  93. $bucket = config('app.wework_ali_oss_bucket');
  94. $oss = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  95. try {
  96. $exist = $oss->doesObjectExist($bucket, $file);
  97. return $exist;
  98. } catch (OssException $e) {
  99. return false;
  100. }
  101. }
  102. }