2017-08-02 68 views
-1

我使用Php作爲前端,Java作爲後端。我已經創建了一個Post API用於上傳文件,並使用curl for api請求。使用curl在PHP中上傳CSV文件

我在當時使用郵遞員打我的Api,但它工作正常,但我面臨prodblem時,我要求api使用捲曲我不能eble得到我做錯了什麼。

這裏是捲曲請求的數據: -

$data2 = array(
       'file' => 
        '@'   . $data1->file->tmp_name 
        . ';filename=' . $data1->file->name 
        . ';type='  . $data1->file->type 
      ); 

我這是怎麼發出嫋嫋要求: -

$ch = curl_init(); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 120); 
     curl_setopt($ch,CURLOPT_URL,$this->url); 
     curl_setopt($ch, CURLOPT_HEADER, 1); //parveen 
     curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); //parveen 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
     curl_setopt($ch, CURLOPT_POSTFIELDS,$data2); 

     $headers = array(
      'Content-Type:'.$this->service->contentType, 
      'Launcher:'.$this->serverName, 
      'domain:'.$this->service->domain, 
     ); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
     $this->responseBody=curl_exec($ch); 

鏈接在那裏我找到這個解決方案: -

enter link description here

我搜索了很多找到解決方案,但沒有爲我這麼工作Ase幫助我。 謝謝

+0

請詳細說明更多關於你的問題,例如向我們顯示錯誤消息,並向我們展示更多代碼 – samAlvin

+0

@samAlvin我已更新該問題。我沒有從服務器收到任何錯誤,但數據沒有在API(後端java)中收到。 –

回答

0

從PHP5天開始,您嘗試上傳文件的方式並不受支持,甚至在5.5+版本中,您需要使用CURLOPT_SAFE_UPLOAD上傳@。上傳文件時,像

$data2 = array(
       'file' => new CURLFile($data1->file->name,$data1->file->type,$data1->file->tmp_name) 
    ); 

也使用CURLFile,不要用CURLOPT_CUSTOMREQUEST POST請求,只使用CURLOPT_POST。 (這對於GET請求和CURLOPT_HTTPGET也是如此)

另外,檢查curl_setopt的返回值,如果在設置你的選項時出現問題,它返回bool(false),在這種情況下,你應該使用curl_error提取錯誤消息。使用類似

function ecurl_setopt($ch,int $option,$value){ 
    if(!curl_setopt($ch,$option,$value)){ 
     throw new \RuntimeException('curl_setopt failed! '.curl_error($ch)); 
    } 
} 

和普羅蒂普,當你正在調試卷曲代碼,使用CURLOPT_VERBOSE,它打印很多有用的調試信息

+0

感謝您的回覆。我嘗試同樣的方式,但仍然無法正常工作。但現在我成功地發現錯誤使用curl_error($ ch)。所以現在我geting一個錯誤「無法打開文件」xyz.csv「」。我發現很多,但沒有什麼幫助我。 –

+0

@ParveenGuleria有你的問題!您提供的文件路徑是錯誤的,或者php運行的用戶帳戶沒有權限訪問該文件。這個輸出是什麼? 'system('namei -l'.escapeshellarg($ data1-> file-> tmp_name));' – hanshenrik

+0

它現在正在工作。我提供的文件路徑是錯誤的。我必須提供絕對路徑,而不是工作正常。非常感謝您的幫助。 –