Laravel调用Google Drive API重命名文件夹报403 fieldNotWritable错误
解决Google Drive API重命名文件夹时的403权限错误
问题根源
你遇到的403错误是因为直接将完整的$folder对象传入files->update()方法,该对象包含了Google Drive API标记为只读的字段(比如createdTime、owners等),API会拒绝修改这些不可写字段的请求,从而抛出The resource body includes fields which are not directly writable错误。
可行解决方案
不要传入完整的文件夹对象,而是创建一个仅包含需要修改字段(这里是name)的精简版Google_Service_Drive_DriveFile对象,再调用更新方法:
示例代码
// 假设你已经获取到目标文件夹的ID $folderId $newFolderName = "新的文件夹名称"; // 创建仅包含要修改字段的DriveFile对象 $updatedFolder = new Google_Service_Drive_DriveFile(); $updatedFolder->setName($newFolderName); // 调用update方法,第一个参数是文件夹ID,第二个是精简后的对象 $googleDriveService->files->update($folderId, $updatedFolder);
额外优化(可选)
如果不需要返回更新后的完整文件夹信息,可以通过fields参数指定仅返回需要的字段,减少API响应数据:
$googleDriveService->files->update( $folderId, $updatedFolder, ['fields' => 'id,name'] // 只返回ID和名称 );
验证要点
- 确认OAuth授权时已正确请求
https://www.googleapis.com/auth/drive权限(你的配置已经包含,但如果之前授权时未更新权限,可能需要重新授权应用); - 确保目标文件夹ID正确,且当前授权用户拥有该文件夹的编辑权限。
内容的提问来源于stack exchange,提问作者Cedric Cholley
相关产品推荐
相关产品推荐

