如何将文件上传至Google Drive共享驱动器文件夹?
上传文件到Google共享驱动器的代码修改方案
要把文件上传到共享驱动器,需针对原代码做关键修改,同时确保服务账号权限配置正确:
前置准备
- 找到
credentials.json里的服务账号邮箱,将其添加到目标共享驱动器中,授予编辑权限,否则会触发权限不足错误。 - 获取共享驱动器ID:打开共享驱动器首页,地址栏
drive/folders/后的字符串即为共享驱动器ID(注意不是文件夹ID)。
核心修改点
- 在文件元数据中加入共享驱动器ID(
driveId字段) - 在文件创建请求里添加
supportsAllDrives => true参数(允许API操作共享驱动器资源) - 确保
parents字段是共享驱动器内目标文件夹的ID(若直接上传到共享驱动器根目录,parents可设为共享驱动器ID)
修改后的完整代码
require __DIR__ . '/vendor/autoload.php'; use Google\Client; use Google\Service\Drive; function uploadToSharedDrive() { try { $client = new Client(); putenv('GOOGLE_APPLICATION_CREDENTIALS=./credentials.json'); $client->useApplicationDefaultCredentials(); $client->addScope(Drive::DRIVE); $driveService = new Drive($client); // 配置文件与共享驱动器信息 $filePath = getcwd().'/637fdc0994855.mp4'; $fileName = basename($filePath); $mimeType = mime_content_type($filePath); $sharedDriveId = '你的共享驱动器ID'; // 替换为实际共享驱动器ID $targetFolderId = '1VBi8C04HBonM6L4CfL-jHWZ0QoQRyrCL'; // 共享驱动器内的目标文件夹ID $fileMetadata = new Drive\DriveFile([ 'name' => $fileName, 'driveId' => $sharedDriveId, 'parents' => [$targetFolderId] ]); $content = file_get_contents($filePath); $file = $driveService->files->create($fileMetadata, [ 'data' => $content, 'mimeType' => $mimeType, 'uploadType' => 'multipart', 'fields' => 'id', 'supportsAllDrives' => true // 必须开启此参数以支持共享驱动器操作 ]); printf("上传成功,文件ID: %s\n", $file->id); return $file->id; } catch (Exception $e) { echo "错误信息: " . $e->getMessage(); } } uploadToSharedDrive();
常见问题排查
- 权限不足:检查服务账号是否已添加到共享驱动器,且权限为编辑
- 资源找不到:确认
sharedDriveId和targetFolderId是否正确,且文件夹确实存在于该共享驱动器内 - 大文件上传失败:建议改用分块上传(resumable upload),避免内存溢出
内容的提问来源于stack exchange,提问作者jasonzs
相关产品推荐
相关产品推荐

