3

我有一个表单,允许用户将大型视频文件上传到第 3 方 API 端点。API 期望 api 密钥作为参数之一,因此为了保护它,我将表单提交到 PHP 脚本,然后 PHP 脚本使用 curl 将文件发送到 API。这可行,但问题是这意味着文件被上传了两次:一次上传到我的 php 脚本,然后再次从 PHP 脚本上传到 API。有没有办法同时做这两个?换句话说,让 curl 脚本在 ajax 上传完成之前开始上传?

4

1 回答 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 回答