我有一个表单,允许用户将大型视频文件上传到第 3 方 API 端点。API 期望 api 密钥作为参数之一,因此为了保护它,我将表单提交到 PHP 脚本,然后 PHP 脚本使用 curl 将文件发送到 API。这可行,但问题是这意味着文件被上传了两次:一次上传到我的 php 脚本,然后再次从 PHP 脚本上传到 API。有没有办法同时做这两个?换句话说,让 curl 脚本在 ajax 上传完成之前开始上传?
问问题
803 次
1 回答
1
如果您从 post 更改为 put 您可以使用
$input = fopen('php://input','r');
然后 fread 它喜欢标准的大文件,然后用 curl 发送部分块?
您将需要使用 CURLOPT_READFUNCTION 以块的形式传递它。
请注意,如果用户因任何原因停止您需要清理丢失的文件
我不确定使用帖子的方法
小例子
使用此选项设置 curl up
curl_setopt($ch, CURLOPT_READFUNCTION, functionCall));
function functionCall($ch, $data){
global $input;
return fread($input, $length);
}
$length 是每个块中发送的数据量。用户必须在上传开始前至少上传该数量
8192 是流行的长度,试试看
于 2013-07-31T22:28:12.173 回答