2014-05-04 4 views
6

Quindi ho riscontrato strani problemi con il caricamento PHP con GAPI. Il file viene effettivamente creato sul disco, ma per qualche motivo i dati non arriva a Google e crea solo un file con 0 byte.Google Drive PHP API file caricato vuoto

Ecco il mio codice:

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(); 
    } 
} 

Tutto è autenticato quindi so che non è il problema. Quando ho uscita $ i dati, ottengo il casino di merda che di solito si ottiene quando si tira un file in modo So che non è il problema .. Tutti gli ambiti dovrebbe essere proprio ma qui sono in ogni modo:

$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"); 

No la documentazione che posso trovare su questo problema quindi qualsiasi aiuto sarebbe davvero apprezzato!

risposta

6

Sono stato in grado di capire questo e volevo lasciare questo per chiunque altro che potrebbe avere questo problema. Si è concluso guardando attraverso il codice sorgente e notato un'istruzione If che non era stata attivata.

Change

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

Per

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

E 'solo che facile! Odio quando è così facile ..

+1

la cosa più importante è il 'uploadType' => 'media' –

+1

Hallelujah! Il problema con l'avvio di quickstart.php e il salto a destra nelle operazioni di scrittura: non ti hanno impostato per questo, no non l'hanno fatto. Ti fanno cacciare i poteri distruttivi, che è probabilmente una buona idea :) –