我正在尝试使用自定义属性保存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);
它没有返回错误,事件已保存,但没有自定义属性!?
答案 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图书馆团队的错误。这适用于原始休息请求,这可能是库的问题。