2014-09-07 17 views
15

Sto cercando di scrivere un piccolo script per caricare un file locale su Google Drive, utilizzando l'API PHP di Google Drive. La documentazione è molto povera mantenuta, ma finora sono abbastanza sicuro il codice dovrebbe essere alla ricerca di simile:API PHP di Google Drive - Caricamento file semplice

<?php 

include_once 'Google/Client.php'; 
include_once 'Google/Service/Drive.php'; 
include_once 'Google/Auth/OAuth2.php'; 

$client = new Google_Client(); 

$client->setScopes(array('https://www.googleapis.com/auth/drive.file')); 
$client->setClientId('dfgdfgdg'); 
$client->setClientSecret('dfgdfgdf'); 
$client->setRedirectUri('urn:ietf:wg:oauth:2.0:oob'); 


$service = new Google_Service_Drive($client); 

$data = file_get_contents("a.jpg"); 

// create and upload a new Google Drive file, including the data 
try 
{ 
//Insert a file 
$file = new Google_Service_Drive_DriveFile($client); 

$file->setTitle(uniqid().'.jpg'); 
$file->setMimeType('image/jpeg'); 

$createdFile = $service->files->insert($file, array(
    'data' => $data, 
    'mimeType' => 'image/jpeg', 
    'uploadType' => 'media', 
)); 
} 
catch (Exception $e) 
{ 
    print $e->getMessage(); 
} 

print_r($createdFile); 

?> 

Il problema è che io non sono in grado di fare il giusto autenticazione (o sto facendo qualcosa che non va?). L'errore che ho ricevuto è:

HTTP Error: Unable to connect: 'fopen(compress.zlib://https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart) [function.fopen]: failed to open stream: operation failed' 

Seguito da questo errore:

Notice: Undefined variable: createdFile in C:\wamp\www\GoogleAPI\index.php on line 39 

Che cosa sto facendo di sbagliato? Puoi fornire un semplice script di lavoro per caricare un file su Google Drive utilizzando l'API PHP di Google Drive? Grazie in anticipo!

risposta

15

Usa questo codice per autenticare e caricare un file di prova. È necessario impostare <YOUR_REGISTERED_REDIRECT_URI> (e anche in console) su questo documento stesso per l'autenticazione.

require_once 'Google/Client.php'; 
require_once 'Google/Service/Drive.php'; 

$client = new Google_Client(); 
// Get your credentials from the console 
$client->setClientId('<YOUR_CLIENT_ID>'); 
$client->setClientSecret('<YOUR_CLIENT_SECRET>'); 
$client->setRedirectUri('<YOUR_REGISTERED_REDIRECT_URI>'); 
$client->setScopes(array('https://www.googleapis.com/auth/drive.file')); 

session_start(); 

if (isset($_GET['code']) || (isset($_SESSION['access_token']) && $_SESSION['access_token'])) { 
    if (isset($_GET['code'])) { 
     $client->authenticate($_GET['code']); 
     $_SESSION['access_token'] = $client->getAccessToken(); 
    } else 
     $client->setAccessToken($_SESSION['access_token']); 

    $service = new Google_Service_Drive($client); 

    //Insert a file 
    $file = new Google_Service_Drive_DriveFile(); 
    $file->setName(uniqid().'.jpg'); 
    $file->setDescription('A test document'); 
    $file->setMimeType('image/jpeg'); 

    $data = file_get_contents('a.jpg'); 

    $createdFile = $service->files->create($file, array(
      'data' => $data, 
      'mimeType' => 'image/jpeg', 
      'uploadType' => 'multipart' 
     )); 

    print_r($createdFile); 

} else { 
    $authUrl = $client->createAuthUrl(); 
    header('Location: ' . $authUrl); 
    exit(); 
} 
+0

Grazie per la tua risposta! Penso che lo script che hai fornito sia molto vicino alla cosa di cui ho bisogno. Nella mia versione precedente sono riuscito a ottenere il valore $ _GET ['code']. Anche con la tua versione dello script va bene. Il mio URL viene modificato in: http:? //localhost/googleApi/index.php codice = 4/T1PUKqjURysd_pzhnu7sfG_SPXxc.YsHYHi9UwVyjz_MlCJoi2I5xqokAI Il che significa che il codice è OK. Purtroppo, subito dopo ricevo quegli errori: – mirosoft

+0

Errore irreversibile: eccezione non rilevata 'Google_IO_Exception' con messaggio 'Errore HTTP: impossibile connettersi:' fopen (https://accounts.google.com/o/oauth2/token) [function.fopen ]: impossibile aprire lo stream: argomento non valido '' in C: \ wamp \ www \ GoogleAPI \ Google \ IO \ Stream.php nella riga 112 – mirosoft

+0

alcune configurazioni nel tuo server potrebbero risolvere il problema, ho cercato il tuo errore nel sistema operativo e ho trovato questo: http://stackoverflow.com/q/25193378/3477084 – Hafez

1

Utilizzare questa

<?php 
    require_once 'google-api-php-client/src/Google_Client.php'; 
    require_once 'google-api-php-client/src/contrib/Google_DriveService.php'; 

    $client = new Google_Client(); 
    // Get your credentials from the console 
    $client->setClientId('YOUR_CLIENT_ID'); 
    $client->setClientSecret('YOUR_CLIENT_SECRET'); 
    $client->setRedirectUri('urn:ietf:wg:oauth:2.0:oob'); 
    $client->setScopes(array('https://www.googleapis.com/auth/drive')); 

    $service = new Google_DriveService($client); 

    $authUrl = $client->createAuthUrl(); 

    //Request authorization 
    print "Please visit:\n$authUrl\n\n"; 
    print "Please enter the auth code:\n"; 
    $authCode = trim(fgets(STDIN)); 

    // Exchange authorization code for access token 
    $accessToken = $client->authenticate($authCode); 
    $client->setAccessToken($accessToken); 

    //Insert a file 
    $file = new Google_DriveFile(); 
    $localfile = 'a.jpg'; 
    $title = basename($localfile); 
    $file->setTitle($title); 
    $file->setDescription('My File'); 
    $file->setMimeType('image/jpeg'); 

    $data = file_get_contents($localfile); 

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

    print_r($createdFile); 
    ?> 
+1

Grazie per la risposta, purtroppo questo è un vecchio esempio, già deprecato da Google. Anche i file inclusi sono cambiati. – mirosoft

Problemi correlati