У меня возникают серьезные проблемы с документацией для новой клиентской библиотеки API-интерфейса Google. Кажется, это должно быть легко ответить, не помещая его в stackoverflow. Я серьезно подумываю о том, чтобы опробовать мою собственную, 64-страничную библиотеку, которая «просто работает» пока является «полной головной болью»,
Как, черт возьми, вы устанавливаете uploadType для «возобновляемого» вместо стандартного «простого». Я искал в библиотеке способ сделать это, но, похоже, не существует. Их единственный намек – это код на странице загрузки своего образца https://developers.google.com/drive/quickstart-php
//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', ));
Ничто здесь не задает uploadType … ???
Их документы на другой странице просто показывают uploadType как часть адреса как GET: https://www.googleapis.com/upload/drive/v2/files ?uploadType=resumable
но когда вы используете $service->files->insert
, библиотека устанавливает адрес.
Следующий пример будет работать с последней версией клиента PHP API Google ( https://code.google.com/p/google-api-php-client/source/checkout )
if ($client->getAccessToken()) { $filePath = "path/to/foo.txt"; $chunkSizeBytes = 1 * 1024 * 1024; $file = new Google_DriveFile(); $file->setTitle('My document'); $file->setDescription('A test document'); $file->setMimeType('text/plain'); $media = new Google_MediaFileUpload('text/plain', null, true, $chunkSizeBytes); $media->setFileSize(filesize($filePath)); $result = $service->files->insert($file, array('mediaUpload' => $media)); $status = false; $handle = fopen($filePath, "rb"); while (!$status && !feof($handle)) { $chunk = fread($handle, $chunkSizeBytes); $uploadStatus = $media->nextChunk($result, $chunk); } fclose($handle); }
Это может быть более новая ссылка, но здесь официальный представитель Google принимает этот вопрос: https://developers.google.com/api-client-library/php/guide/media_upload
Из статьи:
Возобновляемая загрузка файла
Также можно разделить загрузку по нескольким запросам. Это удобно для больших файлов и позволяет возобновить загрузку, если есть проблема. Возобновляемые загрузки могут быть отправлены с отдельными метаданными.
$file = new Google_Service_Drive_DriveFile(); $file->title = "Big File"; $chunkSizeBytes = 1 * 1024 * 1024; // Call the API with the media upload, defer so it doesn't immediately return. $client->setDefer(true); $request = $service->files->insert($file); // Create a media file upload to represent our upload process. $media = new Google_Http_MediaFileUpload( $client, $request, 'text/plain', null, true, $chunkSizeBytes ); $media->setFileSize(filesize("path/to/file")); // Upload the various chunks. $status will be false until the process is // complete. $status = false; $handle = fopen("path/to/file", "rb"); while (!$status && !feof($handle)) { $chunk = fread($handle, $chunkSizeBytes); $status = $media->nextChunk($chunk); } // The final value of $status will be the data from the API for the object // that has been uploaded. $result = false; if($status != false) { $result = $status; } fclose($handle); // Reset to the client to execute requests immediately in the future. $client->setDefer(false);