You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CloudConvert报错:同时启动任务过多,PHP图片转格式失败求助

解决CloudConvert "You have started too many jobs at once" 报错

报错原因

CloudConvert\Exceptions\HttpClientException: You have started too many jobs at once

这个报错是因为触发了CloudConvert API的并发任务配额限制。你的前端代码会给每个选中的文件单独发起一次AJAX请求,每个请求都会在PHP中创建一个独立的CloudConvert转换任务,当多选文件时,这些任务会被同时创建,超出了API允许的并发任务数量。

另外你的PHP代码里还有一个逻辑错误:你尝试向export-my-file任务上传文件,而正确的上传目标应该是upload-my-file任务。

解决方案

1. 修改前端代码:批量发送所有文件

把原来循环发送单个文件的逻辑改成一次性发送所有选中的文件,避免同时发起多个请求:

var fileInput = document.querySelector('.upload');
const formData = new FormData();

// 将所有文件添加到同一个FormData中
$.each(fileInput.files, function(index, val) {
    formData.append('files[]', val);
});

// 只发起一次AJAX请求
$.ajax({
    type: 'POST',
    url: 'upload.php',
    processData: false,
    contentType: false,
    data: formData,
    success: function(response) {
        console.log('转换结果:', response);
    },
    error: function(xhr) {
        console.error('请求失败:', xhr.responseText);
    }
});

2. 修改PHP代码:串行处理转换任务

在PHP中逐个处理每个文件的转换任务,确保上一个任务完成后再创建下一个,避免同时触发多个CloudConvert任务:

require 'vendor/autoload.php';

use \CloudConvert\CloudConvert;
use \CloudConvert\Models\Job;
use \CloudConvert\Models\Task;

// 初始化CloudConvert客户端
$cloudconvert = new CloudConvert([
    'api_key' => 'my_key_here',
    'sandbox' => false
]);

$results = [];

// 处理批量上传的文件
if (!empty($_FILES['files']['tmp_name'])) {
    foreach ($_FILES['files']['tmp_name'] as $index => $tempPath) {
        $fileName = $_FILES['files']['name'][$index];
        $uploadError = $_FILES['files']['error'][$index];

        // 跳过上传失败的文件
        if ($uploadError !== UPLOAD_ERR_OK) {
            $results[] = [
                'file' => $fileName,
                'status' => 'failed',
                'message' => '文件上传错误'
            ];
            continue;
        }

        // 创建转换任务
        $job = (new Job())
            ->addTask(new Task('import/upload', 'upload-task'))
            ->addTask(
                (new Task('convert', 'convert-task'))
                    ->set('input', 'upload-task')
                    ->set('output_format', 'png')
            )
            ->addTask(
                (new Task('export/url', 'export-task'))
                    ->set('input', 'convert-task')
            );

        // 创建任务
        $cloudconvert->jobs()->create($job);

        // 获取上传任务并上传文件(修正原代码的错误)
        $uploadTask = $job->getTasks()->whereName('upload-task')[0];
        $cloudconvert->tasks()->upload($uploadTask, fopen($tempPath, 'r'), $fileName);

        // 等待任务完成
        $cloudconvert->jobs()->wait($job);

        // 收集转换后的URL
        foreach ($job->getExportUrls() as $exportFile) {
            $results[] = [
                'file' => $fileName,
                'status' => 'success',
                'url' => $exportFile->url
            ];
        }
    }
}

// 返回JSON格式的结果
header('Content-Type: application/json');
echo json_encode($results);

额外说明

  • CloudConvert的API套餐(尤其是免费版)有明确的并发任务限制,串行处理是最稳妥的避免触发配额的方式。
  • 如果需要更高的转换效率,可以考虑升级CloudConvert的API套餐以获得更高的并发配额,或者联系官方调整你的账户限制。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:27:28