3

Я пытаюсь загрузить файл на свой Google Диск с помощью учетной записи службы. Когда я развертываю этот код, я не хочу, чтобы пользователь предоставлял авторизацию, я хочу, чтобы они загрузились в мою учетную запись. Я использую это через PHP, а ниже я до сих пор.Расположение учетных записей учетной записи службы Google Диска

Этот код основан на примерах, приведенных в официальной документации. Когда я запускаю php-скрипт, я не получаю ошибок, и я печатаю переменную result_r. Он имеет несколько URL-адресов, когда я перехожу к нему с той же учетной записью, с которой я создал все это, он говорит, что мне нужно запросить разрешение. Когда я смотрю в консоли Google Developers, он говорит, что получил запрос и успешно выполнил его.

Однако файл не отображается нигде на моем Google Диске. Я не уверен, где можно увидеть эти файлы в учетной записи службы и как получить этот файл на своем Google Диске. Ниже мой код.

Я где-то пропускаю разрешение, или я должен каким-то образом подключить учетную запись службы к обычной учетной записи?

DEFINE("TESTFILE", 'testfile-small.txt'); 
    if (!file_exists(TESTFILE)) { 
     $fh = fopen(TESTFILE, 'w'); 
     fseek($fh, 1024 * 1024); 
     fwrite($fh, "!", 1); 
     fclose($fh); 
    } 

// The setup 

// Authentication Credentials 
$client_id = '<my client id>'; //Client ID 
$service_account_name = '<my client email'; //Email Address 
$key_file_location = '<path to key>'; //key.p12 

// Create the client 
$client = new Google_Client(); 
$client->setApplicationName("IEEE_File_Upload"); 
$service = new Google_Service_Drive($client); 

// Check for token 
if (isset($_SESSION['service_token'])) { 
    $client->setAccessToken($_SESSION['service_token']); 
} 

// Get the key 
$key = file_get_contents($key_file_location); 

// Create the credentials 
$cred = new Google_Auth_AssertionCredentials(
    $service_account_name, 
    array('https://www.googleapis.com/auth/drive'), 
    $key 
); 

// Set the credentials 
$client->setAssertionCredentials($cred); 

// Something with tokens 
if ($client->getAuth()->isAccessTokenExpired()) { 
    $client->getAuth()->refreshTokenWithAssertion($cred); 
} 
$_SESSION['service_token'] = $client->getAccessToken(); 

// Actual file stuff 

    // Now lets try and send the metadata as well using multipart! 
    $file = new Google_Service_Drive_DriveFile(); 
    $file->setTitle("Hello World!"); 
    $result = $service->files->insert(
     $file, 
     array(
     'data' => file_get_contents(TESTFILE), 
     'mimeType' => 'application/octet-stream', 
     'uploadType' => 'multipart' 
    ) 
); 

echo "<h3>Results Of Call:</h3>"; 
foreach ($result as $item) { 
    echo $item['volumeInfo']['title'], "<br /> \n"; 

ответ

10

учетная запись службы НЕ ВЫ, учетная запись службы является его собственный пользовательский тип Sudo сущность вещи. У учетной записи службы есть своя собственная учетная запись диска, собственный календарь Google. Когда вы предварительно загружаете файлы учетной записи службы, их загружают в свою учетную запись диска Google, а не ваши.

Я предлагаю вам использовать тот же скрипт и сделать список файлов, чтобы узнать, был ли файл загружен на учетную запись учетной записи службы.

У вас нет веб-интерфейса для учетной записи службы, поэтому вы не можете войти в систему и проверить ее через Интернет, все это должно быть выполнено с использованием кода вашей учетной записи службы.

+0

Я знал, что учетная запись службы не является пользователем, но ваше объяснение на веб-интерфейсах очищает вещи. В таком случае, есть ли способ получить загруженный файл на стороне сервера (так сказать) и скопировать его в учетную запись произвольного пользователя (в данном случае мою), если это разрешено? Используя что-то вроде Google App Engine? –

+1

вы можете создать каталог в учетной записи службы. предоставить указанному пользователю доступ к этому каталогу. Но после загрузки файлов вам также придется исправлять разрешения на файл, предоставляя указанному пользователю доступ к файлу. то пользователь должен иметь возможность увидеть его там, где есть веб-интерфейс – DaImTo

1

«Я пытаюсь загрузить файл на свой Google Диск с помощью учетной записи службы».

Как сказал DaImTo, учетная запись службы не совпадает с вашей собственной учетной записью накопителя. Ключ находится в слове «Учетная запись», т.е. это отдельная учетная запись.

Если вы хотите загрузить в свою учетную запись, вам просто нужно приобрести токен обновления для этой учетной записи, а затем использовать его для создания токена доступа каждый раз, когда хотите сделать загрузку. Необходимые шаги описаны здесь How do I authorise an app (web or installed) without user intervention? (canonical ?)

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