我希望使用 drive api v3 从我的远程服务器上传一个非常大的 zip 文件(几百 GB)到我的谷歌驱动器。我尝试按照 Toward Data Science 中的 教程进行操作,但它将可恢复上传的使用推迟到驱动器 api 文档,这对初学者来说不是很友好。关于此事的其他问题不处理我正在处理的文件大小。他们也没有提到在上传文件时保持访问令牌有效的问题。我在搜索过程中还发现了another SO answer。然而,它又是一种“多部分”上传方式。
任何帮助将不胜感激。我希望使用 python 脚本自动执行此操作。
提前致谢!
这是 PHP 示例,但也许对您有帮助 在 php 中像这样上传
public function uploadFileChunk($uploadFile)
{
try {
if ($uploadFile) {
$client = $this->getClient();
$service = new Google_Service_Drive($client);
$uploadFileExp = explode('\\', $uploadFile);
$uploadFileName = end($uploadFileExp);
$file = new Google_Service_Drive_DriveFile();
$file->setName($uploadFileName);
$chunkSizeBytes = 100 * 1024 * 1024;
$client->setDefer(true);
$request = $service->files->create($file);
$media = new Google_Http_MediaFileUpload(
$client,
$request,
'application/octet-stream',
null,
true,
$chunkSizeBytes
);
$status = false;
$handle = fopen($uploadFile, "rb");
$fileSize = filesize($uploadFile);
$total_records = (int)($fileSize/$chunkSizeBytes);
$media->setFileSize($fileSize);
$i = 0;
while (!$status && !feof($handle)) {
++$i;
$chunk = fread($handle, $chunkSizeBytes);
$status = $media->nextChunk($chunk);
}
$result = false;
if ($status != false) {
$result = $status;
}
fclose($handle);
$client->setDefer(false);
$fileId = $result->id;
return $fileId;
}
} catch (Exception $e) {
throw $e;
}
}
你需要刷新你的访问令牌来上传大文件,比如 50GB+
if ($client->isAccessTokenExpired()) {
$client->fetchAccessTokenWithRefreshToken($refreshToken['refresh_token']);
file_put_contents($credentialsPath, json_encode($client->getAccessToken()));
}