Загрузите большой файл на диск Google с помощью клиентской библиотеки PHP

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

<?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 APIs 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();
$file->setTitle('My document');
$file->setDescription('A test document');
$file->setMimeType('text/plain');

$data = file_get_contents('document.txt');

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

print_r($createdFile);
?>

person pathfinder    schedule 10.12.2012    source источник
comment
Большой - понятие относительное. Это 10мб? 1 ГБ? 10 ГБ?   -  person Jay Lee    schedule 31.12.2012
comment
не имеет значения, чтобы ответить на вопрос. Но 10-мегабайтный файл достаточно велик, чтобы нуждаться в решении... 5-мегабайтный файл обычно приводит к сбою простой загрузки. Обычно мне нужно загружать файлы размером от 50 МБ до 1 ГБ.   -  person pathfinder    schedule 31.12.2012
comment
У меня была та же проблема, пока я не нашел код для многокомпонентной (возобновляемой) загрузки, показанный в этом ответе: stackoverflow.com/a/14693917 /1060686. Это должно позволить вам загружать большие файлы в рамках обычных ограничений памяти скрипта (вы можете использовать тот же метод для загрузки, если вы заинтересованы. Кроме того, убедитесь, что вы используете последнюю версию клиентского API php [code.google.com/p/google-api-php-client/source/ checkout ] и $apiConfig['use_objects'] имеет значение false в config.php) [1]: [2]:   -  person NotGaeL    schedule 10.03.2013


Ответы (1)


Кажется, на этот вопрос уже был дан ответ? Прочитайте файл как поток, по одному куску за раз и добавьте его в буфер/запишите прямо в сокет:

API Google Диска - клиентская библиотека PHP - настройка uploadType для возобновления загрузки

person Mark    schedule 05.12.2013