Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何同时(PHP)卷曲AJAX上载的文件_Php_Ajax_File Upload_Curl - Fatal编程技术网

如何同时(PHP)卷曲AJAX上载的文件

如何同时(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

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

如果您从post更改为put,您可以使用

$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