DownloadVideoJob.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\jobs;
  8. use yii\base\BaseObject;
  9. use yii\queue\JobInterface;
  10. use app\models\VideoGoodsList;
  11. use app\utils\CurlHelper;
  12. class DownloadVideoJob extends BaseObject implements JobInterface
  13. {
  14. public $id;
  15. public $baseUrl;
  16. public function execute($queue)
  17. {
  18. static::download($this->id, $this->baseUrl);
  19. }
  20. public static function download($id, $baseUrl)
  21. {
  22. $item = VideoGoodsList::findOne($id);
  23. if (!$item) {
  24. return false;
  25. }
  26. if (empty($item->video_url)) {
  27. return false;
  28. }
  29. $saveFile = \Yii::$app->basePath . '/runtime/' . md5($item->video_url) . '.mp4';
  30. try {
  31. CurlHelper::download($item->video_url, $saveFile);
  32. // 使用http_post函数上传视频到服务器
  33. $url = $baseUrl . '/index.php?r=client/v1/upload/upload-video';
  34. $res = http_post($url, [
  35. 'multipart' => [
  36. [
  37. 'name' => 'video',
  38. 'contents' => fopen($saveFile, 'r'),
  39. 'filename' => basename($saveFile),
  40. ]
  41. ],
  42. ]);
  43. if ($res->getStatusCode() != 200) {
  44. return false;
  45. }
  46. $data = json_decode((string)$res->getBody(), true);
  47. if ($data && $data['code'] == 0) {
  48. $item->video_url = $data['url'];
  49. $item->save();
  50. }
  51. if (\file_exists($saveFile)) {
  52. \unlink($saveFile);
  53. }
  54. } catch (\Throwable $e) {
  55. \debug_log($e->getMessage(), 'video.log');
  56. if (\file_exists($saveFile)) {
  57. \unlink($saveFile);
  58. }
  59. }
  60. }
  61. }