Пакетная загрузка не выполняется с помощью Google Диска V3 с главной ветвью API (v2.0).
Я изменил https://github.com/google/google-api-php-client/blob/master/examples/batch.php учетные данные учетной записи службы.
Код:
include_once __DIR__ . '/../vendor/autoload.php'; include_once "templates/base.php"; echo pageHeader("Batching Queries"); // USE TRUE OR FALSE TO TOGGLE BETWEEN BATCHED AND SEQUENTIAL UPLOADS. $useBatch = true; $client = new Google_Client(); $client->setScopes([ 'https://www.googleapis.com/auth/drive', ]); if ($credentials_file = checkServiceAccountCredentialsFile()) { // set the location manually $client->setAuthConfig($credentials_file); } elseif (getenv('GOOGLE_APPLICATION_CREDENTIALS')) { // use the application default credentials $client->useApplicationDefaultCredentials(); } else { exit; } $client->setSubject('some@email.com'); $service = new Google_Service_Drive($client); $client->setUseBatch($useBatch); if ($useBatch) { $batch = $service->createBatch(); } $folder = new Google_Service_Drive_DriveFile([ 'name' => 'Invoices', 'mimeType' => 'application/vnd.google-apps.folder' ]); $req = $service->files->create($folder, [ 'fields' => 'id' ]); if ($useBatch) { $result = $batch->add($req, 'newfolder'); $folder = $batch->execute()['response-newfolder']; $newFolderId = $folder->id; } else { $newFolderId = $req->id; } $uploadIDs = null; if ($useBatch) { $batch = $service->createBatch(); } for ($i=1;$i<=3;$i++) { $file = new Google_Service_Drive_DriveFile([ 'name' => $i . '.jpg', 'mimeType' => 'image/jpeg', 'parents' => [$newFolderId], ]); $req = $service->files->create($file, [ 'data' => file_get_contents('img/'.$i.'.jpg'), 'mimeType' => 'image/jpeg', 'uploadType' => 'media', 'fields' => 'id', ]); if ($useBatch) { $batch->add($req, $i); } else { $uploadIDs[] = $req->id; } } if ($useBatch) { $results = $batch->execute(); } else { print_r($uploadIDs); }
При выполнении последнего $ result = $ batch-> execute () код выше завершится с «Not Found». (папка Invoices будет создана успешно).
С $useBatch = false
все работает так, как ожидалось – папка создается с тремя файлами в ней.
Почему это происходит при пакетной загрузке?
Благодаря!
Основываясь на официальной документации Google , вы получили « 404 файл не найден » из-за того, что пользователь не имеет доступа для чтения к файлу или файл не существует. Предлагаемое действие: сообщите пользователям, что у них нет доступа для чтения к файлу или что файл не существует. Скажите им, что они должны попросить владельца разрешения на файл.
Вы должны включить свой файл $ fileId в свой запрос . Кроме того, вы должны установить ' $ userPermission ', если ' $ useBatch = true '.
Примечание. Вы должны использовать ветвь v1, как указано здесь: https://github.com/google/google-api-php-client