25206


phpのcurlを使ってGoogle
Driveにファイルをアップロードするスクリプトを、[公式ドキュメント](https://developers.google.com/drive/v3/web/manage-
uploads#uploads)を参考に作っているのですがPOSTデータの改行コードをいじくるなど何度も試したのですがcurl_execの返り値がfalseになってしまいます。どこがおかしいかご指摘頂けると助かります。

[code]

    $token = "xxxx";
    $url = "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart";
    
    $inputarray = '';
    $inputarray .= "--foo_bar_baz\r\n";
    $inputarray .= "Content-Type: application/json; charset=UTF-8\r\n\r\n";
    $inputarray .= "{\r\n";
    $inputarray .= "\"name\": \"upload.jpg\",\r\n";
    $inputarray .= "}\r\n\r\n";
    $inputarray .= "--foo_bar_baz\r\n";
    $inputarray .= "Content-Type:image/jpeg\r\n\r\n";
    $inputarray .= file_get_contents("upload.jpg") . "\r\n";
    $inputarray .= "--foo_bar_baz--\r\n";
    
    
    $headers = array(
        'Content-Type: multipart/related; boundary=foo_bar_baz',
        'Authorization: Bearer ' . $token,
        'Content-Length: ' . strlen($inputarray)
    );
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $inputarray);
    
    $output = curl_exec($ch);
    curl_close($ch);
    
    echo $output;
    
[/code]


CC BY-SA 3.0
2016-05-23T15:12:40.487
25118
2016-05-27T00:07:23.307
2016-05-27T00:06:54.867
15610
15610
question
php google-api
curlでGoogle Driveにファイルをアップロードできない


以下のようにCURLOPT_POSTFIELDSの値を修正することでアップロードすることができました。

[code]

    $token = "xxx";
    $url = "https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart";
    
    $headers = array(
        "Content-Type:multipart/related",
            "Authorization: Bearer ".$token
        );
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POST, true);
    
    $data1 = '@'.realpath('./metadata.json').';type=application/json;charset=UTF-8';
    $data2 = '@'.realpath('./test.csv').';type=text/csv';
    
    $postdata = array(
      'metadata'=>$data1,
      'file'=>$data2
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
    
    $output = curl_exec($ch);
    curl_close($ch);
    
    echo $output;
    
[/code]


CC BY-SA 3.0
2016-05-27T00:07:23.307
25206
2016-05-27T00:07:23.307
15610
25118
answer