带有自定义属性的Google云端硬盘API上传文件,响应中缺少属性

时间:2017-06-15 03:41:09

标签: google-api google-drive-api google-api-php-client

我正在尝试使用自定义属性保存google驱动器文件,但它无法正常工作,并且由于Google API的文档很差,我对此感到不满。到目前为止,这是我的代码:

$g = new FileCtrl();
$fileMeta = new Google_Service_Drive_DriveFile();
$fileMeta->name = $file['name'];
$fileMeta->parents = [$g->googleDriveFolderId];
$fileMeta->appProperties = (object)['lead_id'=>$file['lid'], 'sales_package_id'=>$file['pid'], 'user_id'=>$user->uid];
//$fileMeta->size = $file['size'];

$fileData = array(
              'data' => $fileContent,
              'mimeType' => $file['media_type'],
              'uploadType' => $file['multipart'],
            );

 //create file in google drive
$res = $g->client->files->create($fileMeta, $fileData);

它没有返回错误,事件已保存,但没有自定义属性!?

2 个答案:

答案 0 :(得分:3)

您可能正在查找返回的文件资源中的属性。

他们不是因为Drive只返回少量的文件属性(name,mime type,id)。如果要查看完整文件资源,则需要在请求中包含fields=*。所以正确的请求看起来像

POST https://content.googleapis.com/drive/v3/files?fields=*

我不了解PHP库,所以你需要弄明白这一点。它会像

'fields' => '*',

答案 1 :(得分:0)

我刚试过这个。

请求:

{
  "name": "Linda Test",
  "mimeType": "application/vnd.google-apps.document",
  "appProperties": {
    "TestingId": "1"
  }
}

回应:

{
 "kind": "drive#file",
 "id": "1mhP2EW4Kbl81F5AuJ4zJ2IPoeI56i_Vd5K-dfGJRj6Y",
 "name": "Linda Test",
 "mimeType": "application/vnd.google-apps.document"
}

执行file.get检查文件元数据。

{
 "kind": "drive#file",
 "id": "1mhP2EW4Kbl81F5AuJ4zJ2IPoeI56i_Vd5K-dfGJRj6Y",
 "name": "Linda Test",
 "mimeType": "application/vnd.google-apps.document",
 "starred": false,
 "trashed": false,
 "explicitlyTrashed": false,
 "parents": [
  "0AJpJkOVaKccEUk9PVA"
 ],
 "appProperties": {
  "TestingId": "1"
 },
  ...
}

我建议您在返回后使用File.get方法检查上传的文件,以确保它已添加。据我所知,现在可以通过Google云端硬盘网站界面查看这些添加的字段。如果在破坏文件之后仍然发现它没有上传,我建议你将其记录为Google APIs PHP client图书馆团队的错误。这适用于原始休息请求,这可能是库的问题。