0

Hello all i have written a file upload script from Google official docs. It is a server to server authentication without any user interaction. I mean the files are intended to be uploaded to one account so users are not needed to authenticate and authentication is done using a service account private key. My file seem to upload fine because it gives me no error and gives the full object as shown below the code.

$client_email = '';
$json_str = file_get_contents('private_key.json');
$json = json_decode($json_str);
$scopes = array('https://www.googleapis.com/auth/drive');
$credentials = new \Google_Auth_AssertionCredentials(
             $client_email,
             $scopes,
             $json->private_key
);


$client = new \Google_Client();
$client->setAssertionCredentials($credentials);
if ($client->getAuth()->isAccessTokenExpired()) {
   $client->getAuth()->refreshTokenWithAssertion();
}
$service = new \Google_Service_Drive($client);
$file = new \Google_Service_Drive_DriveFile();
$file->setTitle($quote->title);
$file->setDescription($quote->description);
//$file->setMimeType($mimeType);

$result = $service->files->insert($file,array(
                        'data' => file_get_contents($filePath),
                        'mimeType' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
                        'uploadType' => 'multipart',
                        'convert' => true

                      )
                    );


Google_Service_Drive_DriveFile Object

( [collection_key:protected] => spaces [internal_gapi_mappings:protected] => Array ( )

[alternateLink] => https://docs.google.com/document/d/1p406Vcb_cI5lgPDx4YsNmwu-mA7S0ovIPsE94PuGo6w/edit?usp=drivesdk
[appDataContents] => 
[canComment] => 
[copyable] => 1
[createdDate] => 2016-05-22T22:13:46.332Z
[defaultOpenWithLink] => 
[description] => google doc quote test
[downloadUrl] => 
[editable] => 1
[embedLink] => https://docs.google.com/document/d/1p406Vcb_cI5lgPDx4YsNmwu-mA7S0ovIPsE94PuGo6w/preview
[etag] => "An1NegRH_Q1WfUh5qt1ofDI9qPI/MTQ2Mzk1NTIyNjMzMg"
[explicitlyTrashed] => 
[exportLinks] => Array
    (
        [application/rtf] => https://docs.google.com/feeds/download/documents/export/Export?id=1p406Vcb_cI5lgPDx4YsNmwu-mA7S0ovIPsE94PuGo6w&exportFormat=rtf
        [application/vnd.oasis.opendocument.text] => https://docs.google.com/feeds/download/documents/export/Export?id=1p406Vcb_cI5lgPDx4YsNmwu-mA7S0ovIPsE94PuGo6w&exportFormat=odt
        [text/html] => https://docs.google.com/feeds/download/documents/export/Export?id=1p406Vcb_cI5lgPDx4YsNmwu-mA7S0ovIPsE94PuGo6w&exportFormat=html
        [application/pdf] => https://docs.google.com/feeds/download/documents/export/Export?id=1p406Vcb_cI5lgPDx4YsNmwu-mA7S0ovIPsE94PuGo6w&exportFormat=pdf
        [application/zip] => https://docs.google.com/feeds/download/documents/export/Export?id=1p406Vcb_cI5lgPDx4YsNmwu-mA7S0ovIPsE94PuGo6w&exportFormat=zip
        [application/vnd.openxmlformats-officedocument.wordprocessingml.document] => https://docs.google.com/feeds/download/documents/export/Export?id=1p406Vcb_cI5lgPDx4YsNmwu-mA7S0ovIPsE94PuGo6w&exportFormat=docx
        [text/plain] => https://docs.google.com/feeds/download/documents/export/Export?id=1p406Vcb_cI5lgPDx4YsNmwu-mA7S0ovIPsE94PuGo6w&exportFormat=txt
    )

[fileExtension] => 
[fileSize] => 
[folderColorRgb] => 
[fullFileExtension] => 
[headRevisionId] => 
[iconLink] => https://ssl.gstatic.com/docs/doclist/images/icon_11_document_list.png
[id] => 1p406Vcb_cI5lgPDx4YsNmwu-mA7S0ovIPsE94PuGo6w
[imageMediaMetadataType:protected] => Google_Service_Drive_DriveFileImageMediaMetadata
[imageMediaMetadataDataType:protected] => 
[indexableTextType:protected] => Google_Service_Drive_DriveFileIndexableText
[indexableTextDataType:protected] => 
[kind] => drive#file
[labelsType:protected] => Google_Service_Drive_DriveFileLabels
[labelsDataType:protected] => 
[lastModifyingUserType:protected] => Google_Service_Drive_User
[lastModifyingUserDataType:protected] => 
[lastModifyingUserName] => email@gserviceaccount.com
[lastViewedByMeDate] => 2016-05-22T22:13:46.332Z
[markedViewedByMeDate] => 1970-01-01T00:00:00.000Z
[md5Checksum] => 
[mimeType] => application/vnd.google-apps.document
[modifiedByMeDate] => 2016-05-22T22:13:46.332Z
[modifiedDate] => 2016-05-22T22:13:46.332Z
[openWithLinks] => 
[originalFilename] => 
[ownedByMe] => 
[ownerNames] => Array
    (
        [0] => email@gserviceaccount.com
    )

[ownersType:protected] => Google_Service_Drive_User
[ownersDataType:protected] => array
[parentsType:protected] => Google_Service_Drive_ParentReference
[parentsDataType:protected] => array
[permissionsType:protected] => Google_Service_Drive_Permission
[permissionsDataType:protected] => array
[propertiesType:protected] => Google_Service_Drive_Property
[propertiesDataType:protected] => array
[quotaBytesUsed] => 0
[selfLink] => https://www.googleapis.com/drive/v2/files/1p406Vcb_cI5lgPDx4YsNmwu-mA7S0ovIPsE94PuGo6w
[shareable] => 
[shared] => 
[sharedWithMeDate] => 
[sharingUserType:protected] => Google_Service_Drive_User
[sharingUserDataType:protected] => 
[spaces] => Array
    (
        [0] => drive
    )

[thumbnailType:protected] => Google_Service_Drive_DriveFileThumbnail
[thumbnailDataType:protected] => 
[thumbnailLink] => 
[title] => Google doc quote2
[userPermissionType:protected] => Google_Service_Drive_Permission
[userPermissionDataType:protected] => 
[version] => 19
[videoMediaMetadataType:protected] => Google_Service_Drive_DriveFileVideoMediaMetadata
[videoMediaMetadataDataType:protected] => 
[webContentLink] => 
[webViewLink] => 
[writersCanShare] => 1
[modelData:protected] => Array
    (
        [labels] => Array
            (
                [starred] => 
                [hidden] => 
                [trashed] => 
                [restricted] => 
                [viewed] => 1
            )

        [parents] => Array
            (
                [0] => Array
                    (
                        [kind] => drive#parentReference
                        [id] => 0AOX081rNVUe2Uk9PVA
                        [selfLink] => https://www.googleapis.com/drive/v2/files/1p406Vcb_cI5lgPDx4YsNmwu-mA7S0ovIPsE94PuGo6w/parents/0AOX081rNVUe2Uk9PVA
                        [parentLink] => https://www.googleapis.com/drive/v2/files/0AOX081rNVUe2Uk9PVA
                        [isRoot] => 1
                    )

            )

        [userPermission] => Array
            (
                [kind] => drive#permission
                [etag] => "An1NegRH_Q1WfUh5qt1ofDI9qPI/pA5gH9Z7iyxg_Vu6dNFNiyQpzOE"
                [id] => me
                [selfLink] => https://www.googleapis.com/drive/v2/files/1p406Vcb_cI5lgPDx4YsNmwu-mA7S0ovIPsE94PuGo6w/permissions/me
                [role] => owner
                [type] => user
            )

        [owners] => Array
            (
                [0] => Array
                    (
                        [kind] => drive#user
                        [displayName] => email@gserviceaccount.com
                        [isAuthenticatedUser] => 1
                        [permissionId] => 16050536308259210811
                        [emailAddress] => email@gserviceaccount.com
                    )

            )

        [lastModifyingUser] => Array
            (
                [kind] => drive#user
                [displayName] => email@gserviceaccount.com
                [isAuthenticatedUser] => 1
                [permissionId] => 16050536308259210811
                [emailAddress] => 
            )

    )

[processed:protected] => Array
    (
    )

)

I have replaced my original client_email with email@gserviceaccount.com here just for my account security reason. My problem is I can not find my files anywhere on my drive. I have my old files on drive and no new files are showing up.What could be the issue? Does it sound from the response of the API that file was uploaded successfully?

Will highly appreciate any guidance. Thanks!

Imran Khan
  • 358
  • 3
  • 16

2 Answers2

1

This is a common problem that devs incorrectly believe that a Service Account is somehow related to their User Account. It isn't. If you want to upload to a User Account, eg. your own, see How do I authorise an app (web or installed) without user intervention? (canonical ?)

Community
  • 1
  • 1
pinoyyid
  • 21,499
  • 14
  • 64
  • 115
0

If you want uploaded files to be in your own Drive contents, then you need to use your own account credentials to the Drive SDK. This does not need to involve user interaction. You simply need to acquire a refresh token one time, then use that subsequently to generate the access token for Drive.

Files not listed to your Google Drive list because they don't belong to you, They belong to the service account and be mindful that every request your application sends to the Drive API must include an authorization token. Your application must use OAuth 2.0 to authorize requests.

If the request succeeds, the server returns the HTTP 200 OK status code along with any metadata:

HTTP/1.1 200
Content-Type: application/json

{
"id": "0Bx0vC9FG-2AmVnRic0FvSkpFNE0",
"name": "My File"
}
Android Enthusiast
  • 4,826
  • 2
  • 15
  • 30