使用PHP客户端无法删除Google Drive文件的自定义属性(或应用属性appProperty)
使用PHP客户端无法删除Google Drive文件的自定义属性(或应用属性appProperty)
我之前也踩过这个坑!直接把属性设为null确实不会生效,Google Drive API的更新逻辑默认是补丁模式——只有你提供的非空值会被更新,null值会被当作“没有提供这个字段”处理,所以原属性会保留下来。
要解决这个问题,核心是要明确告诉API你要修改(包括删除)哪个属性字段,具体步骤如下:
1. 删除单个自定义属性(properties)
你需要在请求中指定updateMask参数,明确指向要删除的属性,同时将该属性设为null:
$params = array( 'updateMask' => 'properties.myProp' // 精确指定要删除的属性键 ); $file = new Google_Service_Drive_DriveFile(); // 将目标属性设为null $file->setProperties(array('myProp' => null)); $response = $driveService->files->update($fileid, $file, $params);
如果你想一次性删除多个属性,或者保留其他属性只删除目标,可以先获取当前属性列表,移除要删除的键后再传递:
// 先获取当前文件的属性 $currentFile = $driveService->files->get($fileid, array('fields' => 'properties')); $properties = $currentFile->getProperties() ?: array(); // 移除要删除的属性 unset($properties['myProp']); $params = array( 'updateMask' => 'properties' // 指定更新整个properties字段 ); $file = new Google_Service_Drive_DriveFile(); $file->setProperties($properties); $response = $driveService->files->update($fileid, $file, $params);
2. 删除应用属性(appProperties)
逻辑和自定义属性完全一致,只需要把properties替换为appProperties即可:
$params = array( 'updateMask' => 'appProperties.myAppProp' ); $file = new Google_Service_Drive_DriveFile(); $file->setAppProperties(array('myAppProp' => null)); $response = $driveService->files->update($fileid, $file, $params);
关键注意点
- 必须指定
updateMask:这是让API识别你要修改哪个字段的核心,没有这个参数,null值会被直接忽略 - 如果是删除整个属性集合(比如所有自定义属性),可以把
updateMask设为properties,然后传递空数组array()给setProperties()
备注:内容来源于stack exchange,提问作者jthomas
相关产品推荐
相关产品推荐

