PHP集成Vimeo视频上传:无法获取upload.form字段HTML标记求助
解决PHP应用中Vimeo上传无法获取
upload.form的问题 先排查API请求的错误信息
首先得确认API请求是否成功,直接输出完整响应内容,查看是否有错误提示:
$uri = $lib->request('/me/videos', $prms, 'POST'); var_dump($uri); // 输出完整响应,检查是否存在error字段 exit();
如果返回结果里有error字段,说明参数、权限或令牌存在问题,根据错误提示修复即可。
修正参数格式问题
你的代码里有几处参数格式错误,这是无法生成upload.form的常见原因:
size参数不要加引号:
原代码里"size" => "' . $vsize . '"会把文件大小转为字符串,Vimeo要求传入数字类型的字节数,修正后:"upload" => [ "approach" => "post", "size" => $vsize, // 直接传数字,去掉多余引号 "redirect_url" => "你的合法HTTPS跳转URL" ],- 布尔值不要用字符串:
所有true/false参数应使用PHP原生布尔类型,而非字符串"true"/"false",比如:"embed" => [ "volume" => true, "logos" => [ "vimeo" => false, "customs" => [ "active" => false, "sticky" => false ] ], // 其他embed参数同理,将带引号的布尔值改为原生布尔值 ] redirect_url必须是HTTPS:
Vimeo要求跳转URL必须为HTTPS,且属于你在开发者控制台配置的允许域名范围内。
确认API令牌权限
你的Vimeo访问令牌必须包含**create和upload**权限,否则API不会返回上传表单。前往Vimeo开发者后台检查令牌的权限范围,确保包含public、create、edit、upload这些必要权限。
正确渲染上传表单
upload.form是一个数组,需要自行将其转换为HTML表单,而非直接使用数组。在form-fields.php中可以这样处理:
<?php session_start(); if (!isset($_SESSION['form'])) { die("上传表单未生成,请检查API请求"); } $form = $_SESSION['form']; ?> <form action="<?= htmlspecialchars($form['action']) ?>" method="<?= $form['method'] ?>" enctype="<?= $form['enctype'] ?>"> <!-- 渲染隐藏字段 --> <?php foreach ($form['fields'] as $field): ?> <?php if ($field['type'] === 'hidden'): ?> <input type="hidden" name="<?= htmlspecialchars($field['name']) ?>" value="<?= htmlspecialchars($field['value']) ?>"> <?php endif; ?> <?php endforeach; ?> <!-- 文件上传字段 --> <input type="file" name="file" required> <button type="submit">上传视频到Vimeo</button> </form>
其他注意事项
- 确保
$vsize是视频文件的实际字节大小,可通过filesize($videoFilePath)获取。 - 避免在
name、description参数中直接拼接字符串,防止特殊字符导致JSON格式错误,建议先对变量进行转义或使用SDK的参数处理逻辑。
内容的提问来源于stack exchange,提问作者stephen mbithi
相关产品推荐
相关产品推荐

