Я использую клиентскую библиотеку API для PHP (бета) для работы с google drive api, до сих пор могу разрешать и загружать файл в chuncks. Согласно документации, эти три шага должны быть предприняты для загрузки файла:
- Начать возобновляемый сеанс.
- Сохраните возобновляемый URI сеанса.
- Загрузите файл.
Я думаю, что клиентская библиотека обрабатывает. Опять же, согласно документации, если я хочу показать прогресс или возобновить прерванный загрузку или обработать ошибки, мне нужно зафиксировать ответ и также отправить сообщение запросы вроде этого:
> PUT {session_uri} HTTP/1.1 Content-Length: 0 Content-Range: bytes
> */2000000
Но я понятия не имею, как мне сделать такой запрос и откуда я могу получить ответ, php-код, который я использую для загрузки, как и любой другой php-код, возвращает значения только тогда, когда это выполняется, когда загрузка выполнена. вот функция, которую я использую для загрузки файлов (возобновляется):
function uploadFile($service,$client,$filetoUpload,$parentId){
$file = new Google_Service_Drive_DriveFile();
$file->title = $filetoUpload['name'];
$chunkSizeBytes = 1 * 1024 * 1024;
// Set the parent folder.
if ($parentId != null) {
$parent = new Google_Service_Drive_ParentReference();
$parent->setId($parentId);
$file->setParents(array($parent));
}
// 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,
$filetoUpload['type'],
null,
true,
$chunkSizeBytes
);
$media->setFileSize(filesize($filetoUpload['tmp_name']));
// Upload the various chunks. $status will be false until the process is
// complete.
$status = false;
$handle = fopen($filetoUpload['tmp_name'], "rb");
while (!$status && !feof($handle)) {
set_time_limit(120);
$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;
set_time_limit(30);
echo "<pre>";
print_r($result);
}
fclose($handle);
// Reset to the client to execute requests immediately in the future.
$client->setDefer(false);
}
Должен ли я создать отдельный php файл для обработки этих запросов? если да, то как сказать, в каком статусе файла я запрашиваю? Благодарю.