2015-04-17 91 views
1

我試圖使用以下PHP代碼將文件上傳到Redmine。PHP cURL POST請求 - 上傳過程中文件損壞

$curl = curl_init(); 

curl_setopt($curl, CURLOPT_URL, $url) 
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/octet-stream', 
    'X-Redmine-API-Key: ' . $apiKey)); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_BINARYTRANSFER, TRUE); 

$data = array('file' => '@' . $filePath); 

curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
curl_setopt($curl, CURLOPT_POST, 1); 

$token = curl_exec($curl); 

該請求返回一個有效的上傳令牌,但該文件在上載過程中損壞。試圖上傳,例如,一個空的.txt文件導致上傳的覆蓋.txt文件現在包含以下行。

------------------------------ dde946a683ac

內容處置:形狀數據; NAME = 「文件」; filename =「/ var/www/wp-content/uploads/redmine_uploads/emptyTextFile.txt」 Content-Type:application/octet-stream

--------------- --------------- dde946a683ac--

任何想法爲什麼發生這種情況?

回答

0

嘗試在您的CURLOPT_POSTFIELDS陣列中添加名稱值。

$data = array('name' => 'SomeName', 'file' => '@' . realpath($filePath)); 

順便說一句,你no longer needCURLOPT_BINARYTRANSFER

+0

排除'CURLOPT_BINARYTRANSFER'和編輯 '$ data = array('name'=>'emptyTextFile','file'=>'@'。$ filePath);' 仍導致一個損壞的文件現在包含行 ------------------------------ a943ac000d23 Content-Disposition:form-data; name =「name」 emptyTextFile ------------------------------ a943ac000d23 Content-Disposition:form-data; NAME = 「文件」; filename =「/ var/www/wp-content/uploads/redmine_uploads/emptyTextFile.txt」 Content-Type:application/octet-stream ----------------- ------------- a943ac000d23-- –

3

想通了。修改我的代碼爲

$curl = curl_init(); 

curl_setopt($curl, CURLOPT_URL, $url) 
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/octet-stream', 
    'X-Redmine-API-Key: ' . $apiKey)); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 

$file = fopen($filePath, 'r'); 
$size = filesize($filePath); 
$filedata = fread($file,$size); 

curl_setopt($curl, CURLOPT_POSTFIELDS, $filedata); 
curl_setopt($curl, CURLOPT_INFILE, $file); 
curl_setopt($curl, CURLOPT_INFILESIZE, $size); 

curl_setopt($curl, CURLOPT_POST, 1); 

$token = curl_exec($curl); 

產生所需的文件上載。