2015-03-02 6 views
1

У меня проблема с загрузкой файла с Google Drive с помощью php api. Мне удалось загрузить файл на Google Drive в папку, а $ service-> files-> insert возвращает мне File Resource, у которого есть атрибут downloadUrl, но когда я перенаправляюсь на этот URL-адрес, он не работает. Я получаю ошибку 401. Почему это происходит? Что мне нужно сделать, чтобы сделать эту работу?Google Drive PHP API Загрузить файл

Вот код:

<?php 
require_once 'vendor/autoload.php'; 
session_start(); 

$client_id = 'xxx'; 
$client_secret = 'yyy'; 
$redirect_uri = 'http://localhost/GoogleDrive/code.php'; 

$client = new Google_Client(); 
$client->setClientId($client_id); 
$client->setClientSecret($client_secret); 
$client->setRedirectUri($redirect_uri); 
$client->addScope("https://www.googleapis.com/auth/drive"); 

$service = new Google_Service_Drive($client); 

$authUrl = $client->createAuthUrl(); 
header("Location: $authUrl"); 

и code.php

require_once 'vendor/autoload.php'; 
session_start(); 

$client_id = 'xxx'; 
$client_secret = 'yyy'; 
$redirect_uri = 'http://localhost/GoogleDrivePayload/code.php'; 

$client = new Google_Client(); 
$client->setClientId($client_id); 
$client->setClientSecret($client_secret); 
$client->setRedirectUri($redirect_uri); 
$client->setApprovalPrompt('force'); 
$client->addScope("https://www.googleapis.com/auth/drive"); 

$service = new Google_Service_Drive($client); 


if (isset($_GET['code'])) { 
    $client->authenticate($_GET['code']); 
    $_SESSION['upload_token'] = $client->getAccessToken(); 
    $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; 
    header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); 
} 

if (isset($_SESSION['upload_token']) && $_SESSION['upload_token']) { 
    $client->setAccessToken($_SESSION['upload_token']); 
    if ($client->isAccessTokenExpired()) { 
     unset($_SESSION['upload_token']); 
    } 
} 

if ($client->getAccessToken()) { 
    $file = new Google_Service_Drive_DriveFile(); 
    $file->setTitle("hello.exe"); 
    $file->setDescription("LALALALALAL"); 
    $file->setMimeType('application/x-msdos-program'); 

    $parent = new Google_Service_Drive_ParentReference(); 
    $parent->setId("zzz"); 
    $file->setParents(array($parent)); 

    $data = file_get_contents('hello.exe'); 
    $createdFile = $service->files->insert($file, array(
      'data' => $data, 
      'mimeType' => 'application/x-msdos-program', 
      'uploadType' => 'multipart', 
      "visibility" => "DEFAULT" 
    )); 

    header("Location: " . $createdFile->downloadUrl); 
} 

ответ

1

downloadUrl именно то, что он говорит, то есть. URL-адрес вашего PHP-приложения, который можно использовать для извлечения файла. Вы почти никогда не перенаправляете браузер к этому URL-адресу, и если вы это сделали (вероятно, вам этого не захочется), вам нужно добавить действительный токен доступа к URL-адресу, чтобы исправить 401.

+0

Я пробовал с file_get_contents ($ createdFile-> downloadUrl), но все равно получает ошибку 401. – clzola

+0

401 просто означает, что ваш токен доступа неверен. Вам нужно просмотреть, как вы управляете своим токеном. Попробуйте войти в базовый http, чтобы узнать, что происходит. – pinoyyid

Смежные вопросы