Ver código fonte

新增批量上传图片接口

lh 4 meses atrás
pai
commit
21958be5ab

+ 45 - 0
app/Http/Controllers/AIGeneration/ImageGenerationController.php

@@ -243,4 +243,49 @@ class ImageGenerationController extends BaseController
         $result = $this->aiImageGenerationService->getTaskList($data);
         return $this->success($result, [new AIGenerationTransformer(), 'newBuildTaskList']);
     }
+
+    /**
+     * 批量上传图片
+     *
+     * @param Request $request
+     * @return void
+     */
+    public function batchUploadImg(Request $request) {
+        $refImgUrls = [];
+        // 处理上传的图片
+        if ($request->hasFile('ref_img_file')) {
+            $refImgFiles = is_array($request->file('ref_img_file')) 
+                ? $request->file('ref_img_file') 
+                : [$request->file('ref_img_file')];
+            
+            foreach ($refImgFiles as $index => $refImgFile) {
+                // 验证图片分辨率和比例
+                $refImgInfo = @getimagesize($refImgFile->getPathname());
+                
+                if (!$refImgInfo) {
+                    Utils::throwError('1003:图片' . ($index + 1) . '格式无效');
+                }
+                
+                $refImg = [
+                    'width' => $refImgInfo[0],
+                    'height' => $refImgInfo[1],
+                    'size' => $refImgFile->getSize(),
+                ];
+                
+                // 验证图片规格
+                $this->validateImageSpecs($refImg, $index + 1);
+                
+                // 上传图片到服务器并获取URL
+                $filename = randStr(10) . '.' . $refImgFile->getClientOriginalExtension();
+                $uploaded_url = uploadStreamByTos('image', file_get_contents($refImgFile->getPathname()), $filename);
+                if (!$uploaded_url) {
+                    Utils::throwError('1003:图片' . ($index + 1) . '保存失败');
+                }
+                $refImgUrls[] = $uploaded_url;
+            }
+
+        }
+
+        return $this->success(['image_urls' => $refImgUrls]);
+    }
 }

+ 60 - 0
app/Http/Controllers/Anime/AnimeController.php

@@ -0,0 +1,60 @@
+<?php
+
+namespace App\Http\Controllers\Anime;
+
+use App\Transformer\Anime\AnimeTransformer;
+use App\Facade\Site;
+use App\Consts\ErrorConst;
+use App\Exceptions\ApiException;
+use App\Libs\ApiResponse;
+use App\Libs\Utils;
+use App\Services\AIGeneration\AIImageGenerationService;
+use App\Services\AIGeneration\AIVideoGenerationService;
+use App\Services\Anime\AnimeService;
+use Illuminate\Http\Request;
+use Illuminate\Routing\Controller as BaseController;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Redis;
+use Illuminate\Support\Facades\Validator;
+
+class AnimeController extends BaseController
+{
+    use ApiResponse;
+    protected $AnimeService;
+    protected $AIImageGenerationService;
+    protected $AIVideoGenerationService;
+
+    public function __construct(
+        AnimeService $AnimeService,
+        AIImageGenerationService $AIImageGenerationService,
+        AIVideoGenerationService $AIVideoGenerationService
+    ) {
+        $this->AnimeService = $AnimeService;
+        $this->AIImageGenerationService = $AIImageGenerationService;
+        $this->AIVideoGenerationService = $AIVideoGenerationService;
+    }
+
+
+    public function batchSetRoleImg(Request $request) {
+        // 忽略所有超时限制
+        set_time_limit(0);
+        ini_set('max_execution_time', '0');
+
+        $data = $request->all();
+        $result = $this->AnimeService->batchSetRoleImg($data);
+        return $this->success($result);
+    }
+
+    // public function insertBgm(Request $request) {
+    //     $data = $request->all();
+    //     $result = $this->AnimeService->insertBgm($data);
+    //     return $this->success(['success'=>$result ? 1 : 0]);
+    // }
+
+
+    // public function scriptList(Request $request) {
+    //     $data = $request->all();
+    //     $result = $this->AnimeService->scriptList($data);
+    //     return $this->success($result, [new AnimeTransformer(), 'newBuildScriptList']);
+    // }
+}

+ 34 - 0
app/Services/Anime/AnimeService.php

@@ -0,0 +1,34 @@
+<?php
+
+namespace App\Services\Anime;
+
+use App\Consts\ErrorConst;
+use App\Facade\Site;
+use App\Libs\Utils;
+use GuzzleHttp\Client;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\Redis;
+use OSS\Core\OssException;
+use OSS\OssClient;
+
+class AnimeService
+{
+
+    public function __construct() {
+
+    }
+
+    public function uploadImg($data) {
+
+    }
+
+    public function batchSetRoleImg($data) {
+        $roles = getProp($data, 'roles');
+        
+        foreach ($roles as $role) {
+            // 参考图地址
+            $ref
+        }
+    }
+}

Diferenças do arquivo suprimidas por serem muito extensas
+ 448 - 449
app/Services/DeepSeek/DeepSeekService.php


+ 36 - 0
app/Transformer/Anime/AnimeTransformer.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace App\Transformer\Anime;
+
+class AnimeTransformer
+{
+
+    public function newBuildChapterList($data): array
+    {
+        return [
+            'meta'      => getMeta($data['list']),
+            'header'    => $data['header'],
+            'list'      => $this->newEachChapterList($data['list']),
+        ];
+    }
+
+    private function newEachChapterList($list): array
+    {
+        $result = [];
+        if (empty($list)) return $result;
+
+        foreach ($list as $item) {
+            $result[] = [
+                'cid'               => getProp($item, 'cid'),
+                'chapter_name'      => getProp($item, 'chapter_name'),
+                'sequence'          => getProp($item, 'sequence'),
+                'size'              => getProp($item, 'size'),
+                'generate_status'   => getProp($item, 'generate_status'),
+                'audio_url'         => getProp($item, 'audio_url'),
+                'remark'            => getProp($item, 'remark'),
+            ];
+        }
+
+        return $result;
+    }
+}

+ 1 - 9
app/Transformer/DeepSeek/DeepSeekTransformer.php

@@ -23,13 +23,6 @@ class DeepSeekTransformer
 
         foreach ($list as $item) {
             $script_id = getProp($item, 'id');
-            $status = getProp($item, 'status');
-            $status_arr =[
-                '1' => '待创作',
-                '2' => '解析中',
-                '3' => '解析完成',
-                '4' => '解析失败',
-            ];
 
             // 获取分集信息
             $episodes = DB::table('mp_script_episodes')->where('script_id', $script_id)->orderBy('episode_number')->select('title', 'episode_number', 'content')->get()->map(function ($value) {
@@ -39,8 +32,7 @@ class DeepSeekTransformer
                 'user_id'               => getProp($item, 'user_id'),
                 'script_id'             => $script_id,
                 'script_name'           => getProp($item, 'script_name'),
-                'status'                => $status,
-                'status_info'           => isset($status_arr[$status]) ? $status_arr[$status] : '',
+                'status'                => getProp($item, 'status'),
                 'created_at'            => transDate(getProp($item, 'created_at')),
                 'updated_at'            => transDate(getProp($item, 'updated_at')),
                 'episodes'              => $episodes,

+ 1 - 0
routes/api.php

@@ -98,6 +98,7 @@ Route::group(['middleware' => ['bindToken', 'bindExportToken', 'checkLogin']], f
     // AI生成
     Route::group(['prefix' => 'AIGeneration'], function () {
         // 图片生成相关路由
+        Route::post('image/batchUpload', [ImageGenerationController::class, 'batchUploadImg']);
         Route::post('image/createTask', [ImageGenerationController::class, 'createTask']);
         Route::get('image/taskStatus', [ImageGenerationController::class, 'taskStatus']);
         Route::get('image/taskList', [ImageGenerationController::class, 'taskList']);