2014-05-04 19 views
6

Mam więc dziwne problemy z przesyłaniem PHP za pomocą interfejsu GAPI. Plik faktycznie jest tworzony na dysku, ale z jakiegoś powodu dane nie trafiają do Google i po prostu tworzy plik z 0 bajtami.Google Drive PHP API pusty załadowany plik

Oto mój kod:

function uploadFile($service, $title, $description, $parentId, $mimeType, $filepath) { 
    $mimeType = "image/png"; 
    $title = "test.png"; 
    $file = new Google_Service_Drive_DriveFile(); 
    $file->setTitle($title); 
    $file->setDescription($description); 
    $file->setMimeType($mimeType); 

    // Set the parent folder. 
    if ($parentId != null) { 
     $parent = new Google_Service_Drive_ParentReference(); 
     $parent->setId($parentId); 
     $file->setParents(array($parent)); 
    } 

    try { 
     $data = file_get_contents(); 

     $createdFile = $service->files->insert($file, array(
      'data' => $data, 
      'mimeType' => $mimeType, 
     )); 

     // Uncomment the following line to print the File ID 
     // print 'File ID: %s' % $createdFile->getId(); 

     //return $createdFile; 
    } catch (Exception $e) { 
     echo "An error occurred: " . $e->getMessage(); 
    } 
} 

Wszystko jest uwierzytelniona, więc wiem, że nie jest to problem. Kiedy wyjście $ dane, mam bałagan bzdur, że zazwyczaj, gdy wyciągając plik, więc wiem, że to nie jest problem .. Wszystkie zakresy powinny mieć rację, ale tutaj są one tak czy inaczej:

$client->addScope("https://www.googleapis.com/auth/drive"); 
$client->addScope("https://www.googleapis.com/auth/drive.file"); 
$client->addScope("https://www.googleapis.com/auth/drive.appdata"); 
$client->addScope("https://www.googleapis.com/auth/drive.scripts"); 
$client->addScope("https://www.googleapis.com/auth/drive.apps.readonly"); 
$client->addScope("https://www.googleapis.com/auth/drive.metadata.readonly"); 
$client->addScope("https://www.googleapis.com/auth/drive.readonly"); 

Nie dokumentację mogę znaleźć na ten temat, więc każda pomoc będzie naprawdę doceniona!

Odpowiedz

6

Udało mi się to zrozumieć i chciałem to zostawić dla każdego, kto może mieć ten problem. Zakończyłem przeglądając kod źródłowy i zauważyłem instrukcję If, która nie została wywołana.

Zmień

$createdFile = $service->files->insert($file, array(
    'data' => $data, 
    'mimeType' => $mimeType, 
)); 

Aby

$createdFile = $service->files->insert($file, array(
    'data' => $data, 
    'mimeType' => $mimeType, 
    'uploadType' => 'media' //add this for pdfs to work 
)); 

To tylko takie proste! Nienawidzę, kiedy to takie proste ...

+1

Najważniejszą rzeczą jest "uploadType" => 'media' –

+1

Alleluja! Problem z zaczynaniem od quickstart.php i skakaniem w prawo do operacji zapisu - nie ustawili cię do tego, nie, nie zrobili tego. Pozwól, że polujesz na niszczycielskie moce, co jest prawdopodobnie dobrym pomysłem :) –

Powiązane problemy