2017-06-15 3 views
1

Je tente d'enregistrer un fichier de disque Google avec des propriétés personnalisées, mais cela ne fonctionne pas et en raison de la très mauvaise documentation de l'API Google, je suis en difficulté avec cette . Voici mon code à ce jour:Fichier de téléchargement de l'API Google Drive avec propriété personnalisée, propriétés manquantes de la réponse

$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); 

Il ne renvoie pas une erreur et l'événement est enregistré, mais sans les propriétés personnalisées !?

+0

Et votre code renvoie une erreur? ne fait rien? Bienvenue à la pile, vous devez nous donner une idée de votre problème avec le code que vous avez posté. – DaImTo

+0

Il ne retourne pas une erreur et l'événement est enregistré, mais sans les propriétés personnalisées !? –

+0

Où vérifiez-vous que les propriétés personnalisées ne sont pas insérées? – DaImTo

Répondre

3

Vous recherchez probablement les propriétés dans la ressource de fichier renvoyée.

La raison pour laquelle ils ne sont pas présents est que Drive ne renvoie qu'un petit nombre de propriétés de fichier (nom, type mime, id). Si vous souhaitez voir la ressource de fichier complète, vous devez inclure fields=* dans la demande. Donc, une demande correcte ressemblerait à quelque chose comme

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

Je ne sais pas la bibliothèque PHP, vous aurez donc besoin de comprendre que peu en dehors. Ce sera quelque chose comme

'fields' => '*',

+0

merci, cela a bien fonctionné. votre supposition était correcte: 'fields' => '*', –

0

Je viens de le tester.

Demande:

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

Réponse:

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

Faites un file.get pour vérifier les métadonnées du fichier.

{ 
"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" 
}, 
    ... 
} 

Je vous suggère de vérifier votre fichier téléchargé en utilisant la méthode File.get après son retourné pour être sûr qu'il a été ajouté. À ma connaissance, il est maintenant possible de voir ces champs ajoutés via l'interface du site Google Drive. Si après avoir ruiné un fichier, vous trouvez encore qu'il n'a pas été téléchargé, je vous suggère de vous connecter comme un bug avec l'équipe de la bibliothèque Google APIs PHP client. Cela fonctionne avec des demandes de repos brutes, cela pourrait être un problème avec la bibliothèque.