2017-08-02 36 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

它现在正在工作。我提供的文件路径是错误的。我必须提供绝对路径,而不是工作正常。非常感谢您的帮助。 –