如何同时(PHP)卷曲AJAX上载的文件
我有一个表单,允许用户将大型视频文件上传到第三方API端点。API希望API键作为参数之一,因此为了保护它,我将表单提交给PHP脚本,PHP脚本使用curl将文件发送给API。这是可行的,但问题是它意味着文件会被上传两次:一次是上传到我的php脚本,然后再从php脚本上传到API。有没有一种方法可以同时做到这两个方面?换句话说,让curl脚本在ajax上传完成之前开始上传?如果您从post更改为put,您可以使用如何同时(PHP)卷曲AJAX上载的文件,php,ajax,file-upload,curl,Php,Ajax,File Upload,Curl,我有一个表单,允许用户将大型视频文件上传到第三方API端点。API希望API键作为参数之一,因此为了保护它,我将表单提交给PHP脚本,PHP脚本使用curl将文件发送给API。这是可行的,但问题是它意味着文件会被上传两次:一次是上传到我的php脚本,然后再从php脚本上传到API。有没有一种方法可以同时做到这两个方面?换句话说,让curl脚本在ajax上传完成之前开始上传?如果您从post更改为put,您可以使用 $input = fopen('php://input','r'); 然后fre
$input = fopen('php://input','r');
然后fread它喜欢标准的大文件,然后用curl发送部分块
您需要使用CURLOPT_READFUNCTION将其分块传递
请注意,如果用户因任何原因停止,您将需要清理丢失的文件
我不确定使用post的方法
小例子
使用此选项设置卷曲
curl_setopt($ch, CURLOPT_READFUNCTION, functionCall));
function functionCall($ch, $data){
global $input;
return fread($input, $length);
}
$length是每个区块中发送的数据量。原告必须在上传开始前上传至少该金额
8192是一个流行的长度,假设一个go它仍然会被上传两次,一次到您的服务器,然后从您的服务器到远程api,只是两次上传是同时进行的,而不是一次又一次。您如何将文件上载到服务器,因为您无法使用POST等,因为在请求完成之前,已发布的文件不可用。我能看到的唯一方法是创建一个附加缺少的api密钥的代理。使用标准的Apache/PHP设置很难做到这一点,因为Apache会在PHP被请求之前处理上传。一个定制的代理/Web服务器可以立即“转发”上传的数据并添加标题,但可能不是PHP。谢谢大家。这很有帮助。我从未设置过自定义代理/Web服务器。你能给我指个地方看看吗?你想在ajax进程完成后开始curl吗?@sudhakar不。我不想等待ajax完成。这是一个有趣的想法!我必须管理块还是它们自动发生?你必须管理,但它只是将参数传递给fread