php
  • curl
  • dropbox-api
  • dropbox-php
  • 2017-02-01 12 views 0 likes 
    0

    Dropbox에 파일을 업로드하는 PHP 스크립트가 있습니다. 명령 줄에서 독립 실행 형 스크립트로 실행하면 완벽하게 작동합니다.Dropbox - URL에서 파일 업로드가 일관되게 작동하지 않습니다.

    그러나 큰 프로젝트에 코드를 통합하면 파일 업로드에 실패하고 cURL은 "errno"0 (즉, cURL 오류가 없음)을 반환하고 Dropbox API에서 출력이 없습니다. 여기

    작동 코드입니다 :

    $token = '<token>'; 
    $url = "https://content.dropboxapi.com/2/files/upload"; 
    
        $post_body = file_get_contents("/other/server/url/test.txt"); 
    
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $token, 
                  'Content-Type: application/octet-stream', 
                  'Dropbox-API-Arg: {"path": "/Dropbox/path/subfolder/test.txt","mode": "add", "autorename": true, "mute": false}')); 
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_body); 
    
    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $data = json_decode(curl_exec($ch), true); 
    curl_close($ch); 
    
    print_r($data); 
    

    을 .... 여기 깨진 코드 : 나는 자신을 호출 API를 탈출

    private function dropbox_uploadFile($path, $file_source, $file_name = "test1.txt") { 
    
    
        echo "<br /><br />PATH: ". $path . '/' . $file_name . "<br /><br />"; 
        echo "<br /><br />SOURCE: ". $file_source . "<br /><br />"; 
    
    
        $token = '<token>'; 
        $url = "https://content.dropboxapi.com/2/files/upload"; 
    
        $post_body = file_get_contents($file_source); 
    
        $ch = curl_init(); 
        curl_setopt($ch, CURLOPT_URL, $url); 
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $token, 
                   'Content-Type: application/octet-stream', 
                   'Dropbox-API-Arg: {"path": ' . $path.'/'.$file_name. '","mode": "add", "autorename": true, "mute": false}')); 
    
        curl_setopt($ch, CURLOPT_POST, 1); 
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_body); 
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); // to prevent cURL error #60 
    
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        $data = json_decode(curl_exec($ch), true); 
    
        if(! $data) { 
         echo "<pre>"; 
         print_r(curl_getinfo($ch)); 
         echo "</pre>"; 
    
         echo "ERROR: " . curl_errno($ch) . "<br /><br />"; 
        } 
    
        curl_close($ch); 
        print_r($data); 
    
    
    } 
    

    답변

    0

    ,이 같은 :

    $res = curl_exec($ch); 
    print_r($res); 
    $data = json_decode($res, true); 
    

    이렇게하면 API의 실제 오류가 표시됩니다.

    API 함수를 호출

    오류 "파일/업로드"HTTP 헤더 "드롭 박스-API, 인수"오류의 다른 유형의 JSON으로

    을 입력을 디코딩 할 수 있습니다를, API는 하나가 일반 돌아갑니다 텍스트 또는 JSON으로 응답 Content-Type 헤더가 표시됩니다. 귀하의 코드에서 JSON 만 처리했으며 유효한 JSON이 제공되지 않은 경우 json_decode이 자동으로 실패합니다.

    어쨌든이 오류는 제공된 JSON의 업로드 인수 자체가 유효하지 않음을 나타냅니다. 이 문제는 path 값의 시작 부분에 누락 된 견적으로 표시되며 여기에서 고정됩니다.

    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $token, 
                  'Content-Type: application/octet-stream', 
                  'Dropbox-API-Arg: {"path": "' . $path.'/'.$file_name. '","mode": "add", "autorename": true, "mute": false}')); 
    

     관련 문제

    • 관련 문제 없음^_^