Laravel 9集成Google API PHP客户端上传YouTube视频报错排查
Laravel 9 + Google API PHP客户端 YouTube上传问题排查与解决
第一个错误:分块大小不符合要求
错误提示明确指出,YouTube可恢复上传的分块(最后一块除外)必须≥262144字节(即256KB),你的代码生成的块仅16098字节,完全不满足要求。解决步骤:
- 初始化
MediaFileUpload时指定标准分块大小:
$chunkSizeBytes = 262144; // 256KB $media = new Google\Service\YouTube\MediaFileUpload( $client, $insertRequest, 'video/mp4', // 精确MIME类型 null, true, // 开启可恢复上传 $chunkSizeBytes );
- 确保分块读取逻辑严格按照设定的字节数读取,例如用
fread($fileHandle, $chunkSizeBytes)替代小尺寸读取。
第二个错误:Multipart上传失败(HTTP 200但未创建视频)
问题集中在三个核心点:
- 文件路径错误:
url('storage/images/rain.mp4')生成的是HTTP链接,file_get_contents远程读取本地文件会引发权限或性能问题,必须改用本地磁盘路径:
// 示例:storage/app/public下的文件路径 $filePath = storage_path('app/public/images/rain.mp4');
- MIME类型不精确:
video/*属于泛型类型,YouTube要求精确匹配视频格式,比如MP4文件需指定video/mp4。 - Multipart上传参数用法错误:正确的multipart上传应通过
MediaFileUpload处理文件内容,而非直接将内容塞入data参数。示例代码:
$video = new Google\Service\YouTube\Video(); $video->setSnippet($yourSnippetConfig); $video->setStatus($yourStatusConfig); $media = new Google\Http\MediaFileUpload( $client, $youtube->videos->insert("status,snippet", $video), 'video/mp4', file_get_contents($filePath), false, // 关闭可恢复上传,启用multipart false ); $uploadStatus = $media->upload();
额外注意事项
- 确认OAuth授权已申请
https://www.googleapis.com/auth/youtube.upload权限,无此权限无法完成上传。 - 调整PHP配置:根据视频大小修改
php.ini中的upload_max_filesize、post_max_size、max_execution_time参数,避免超时或内存不足。 - 大文件优先使用可恢复上传(resumable),小文件再考虑multipart上传,两种上传类型的初始化逻辑需严格区分。
内容的提问来源于stack exchange,提问作者Lothric
相关产品推荐
相关产品推荐

