2014-09-07 6 views
15

J'essaie d'écrire un petit script pour télécharger un fichier local sur Google Drive, en utilisant l'API PHP Google Drive. La documentation est très pauvre maintenu, mais jusqu'à présent je suis assez sûr que le code devrait chercher comme ça:Google Drive API PHP - Téléchargement de fichier simple

<?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); 

?> 

La question est que je ne suis pas en mesure de faire le droit d'authentification (ou je fais quelque chose d'autre mal?). L'erreur que je reçu est:

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' 

Suivi par cette erreur:

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

Qu'est-ce que je fais mal? Pouvez-vous fournir un script de travail simple permettant de télécharger un fichier sur Google Drive à l'aide de l'API PHP Google Drive? Merci d'avance!

Répondre

15

Utilisez ce code pour authentifier et télécharger un fichier de test. Vous devez définir <YOUR_REGISTERED_REDIRECT_URI> (et également dans la console) à ce document lui-même pour authentifier.

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

Merci pour votre réponse! Je pense que le script que vous avez fourni est très proche de ce dont j'ai besoin. Dans ma version précédente, j'ai réussi à obtenir la valeur $ _GET ['code']. Avec votre version du script, c'est OK aussi. Mon URL est changé: http: //localhost/googleApi/index.php code = 4/T1PUKqjURysd_pzhnu7sfG_SPXxc.YsHYHi9UwVyjz_MlCJoi2I5xqokAI Ce qui signifie que le code est OK. Malheureusement, juste après cela, je reçois ces erreurs: – mirosoft

+0

Erreur fatale: Exception non interceptée 'Google_IO_Exception' avec le message 'Erreur HTTP: Impossible de se connecter:' fopen (https://accounts.google.com/o/oauth2/token) [function.fopen ]: Échec de l'ouverture du flux: Argument invalide dans C: \ Wamp \ www \ GoogleAPI \ Google \ IO \ Stream.php sur la ligne 112 – mirosoft

+0

une certaine configuration dans votre serveur peut résoudre le problème, j'ai recherché votre erreur dans le système d'exploitation et trouvé ceci: http://stackoverflow.com/q/25193378/3477084 – Hafez

1

Utilisez cette

<?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

Merci pour votre réponse, malheureusement c'est un vieil exemple, déjà obsolète de Google. Même les fichiers inclus sont modifiés. – mirosoft

Questions connexes