我正在處理腳本以將文件上傳到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個小時,如果你能做到的話。 –