我正在处理脚本以将文件上传到http://imagerelay.com。这是我第一次在PHP中使用REST API和cURL。上传有两个阶段。首先将元数据提交给ImageRelay,其中包含本地文件的文件大小。这将返回一个ID号,用于构建用于上传块的URL(使用CLI'split'生成)。但是,当我使用cURL上传文件时,每个文件都会添加额外的219个字节。我怀疑这与cURL的工作方式有关,但我不知道如何在不手动增加阶段1中的文件大小的情况下纠正超龄,减少219个字节* x个数据块。PHP Curl upload_content_length大于文件大小
这是从cURL请求接收到的响应数组。实际的文件块大小为1M(1,048,576字节),而响应显示219个字节在1048795
[http_code] => 201
[header_size] => 583
[request_size] => 346
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 2.039208
[namelookup_time] => 1.2E-5
[connect_time] => 0.040014
[pretransfer_time] => 0.13825
[size_upload] => 1048795
[size_download] => 1
[speed_download] => 0
[speed_upload] => 514314
[download_content_length] => 1
[upload_content_length] => 1048795
[starttransfer_time] => 0.182222
更下面的代码的相关部分。 $file
表示块,并且$resource
是预定的,因为它增加了每个块。
$ch = curl_init($resource);
curl_setopt($ch, CURLOPT_POST, true);
$pdfData = array('file' => new CurlFile("file-chunks/{$file}", 'application/octet-stream'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
我很感激任何可以提供的帮助。我一直在为此工作一个星期,并在互联网上搜索,但我无法弄清楚为什么大块的文件大小不匹配upload_content_length
或size_upload
。使用curl在命令行上执行此操作时(而不是CLI上的PHP),我没有同样的问题。谢谢!
[编辑]在第一个句子(意外贴!)[/编辑]删除错字 [EDIT2]新增赏金[/编辑]
HTTP multipart/form-data在表单字段和文件上传(它在内容之前有一种迷你标头)以及它添加的边界字节时确实有一些额外的开销。我没有检查,但也许cURL包括所有的数量。你知道发送到另一端的文件的实际大小吗?如果没有,请尝试将您的代码上传到您自己的PHP脚本中,或者如果可以,请设置一个拦截代理以查看究竟发送了什么。 – zinga
Zinga,这是我收到的最好的反馈。我希望你能用一个例子来发表回复,而不是反馈,我会给你赏金。仍然有3个小时,如果你能做到的话。 –