dongwen1909 2014-01-24 12:06 采纳率: 0%
浏览 66
已采纳

谷歌驱动器api-File已上传但尚未列出

I am new to google drive api.. I am working on uploading files from my server to google drive.

In my gmail account I have

  1. created a Service Account, download keys and uploaded to server
  2. Provided access to Drive Api and SDK Api.
  3. Added a Controller to communicate with google as:

        set_include_path(get_include_path() . PATH_SEPARATOR . ROOT .DS. "vendors");
        require_once('Google/Client/Google_Client.php');
        require_once('Googl
    

e/Client/contrib/Google_DriveService.php');

    define('CLIENT_ID','my_client_here....');
    define('SERVICE_ACCOUNT_NAME','my_account_name here');
    define('KEY_FILE',VENDORS.'Google/Client/key/privatekey.p12');  // what i was availed by google.       

    if(is_file(KEY_FILE)){
        $client = new Google_Client();
        $key = file_get_contents(KEY_FILE);
        $client->setClientId(CLIENT_ID);
        $client->setAssertionCredentials(new Google_AssertionCredentials(
          SERVICE_ACCOUNT_NAME,
          array('https://www.googleapis.com/auth/drive'),
          $key)
     );


     $service = new Google_DriveService($client);


            $file = new Google_DriveFile();
            $file->setTitle('Any sample file title');
            $file->setDescription('An experiment to upload text file via server to server');
            $file->setMimeType('text/plain');

            $data = "Lorem ipsum is a dummy text";

            $createdFile = $service->files->insert($file, array(
                  'data' => $data,
                  'mimeType' => 'text/plain',
                ));


            print_r($createdFile);

Now the output of this is as follows:

[kind] => drive#file
[id] => 0B-NwgyCI2GQENkswOHVNcVl2aDQ
[etag] => "11QSOvUX6KZKZVB6nCB3GloLTJQ/MTM5MDU2MzUwNTU2OQ"
[selfLink] => https://www.googleapis.com/drive/v2/files/0B-NwgyCI2GQENkswOHVNcVl2aDQ
[webContentLink] => https://docs.google.com/uc?id=0B-NwgyCI2GQENkswOHVNcVl2aDQ&export=download
[alternateLink] => https://docs.google.com/file/d/0B-NwgyCI2GQENkswOHVNcVl2aDQ/edit?usp=drivesdk
[iconLink] => https://ssl.gstatic.com/docs/doclist/images/icon_10_text_list.png
[title] => Any sample file title
[mimeType] => text/plain
[description] => An experiment to upload text file via server to server
[labels] => Array
    (
        [starred] => 
        [hidden] => 
        [trashed] => 
        [restricted] => 
        [viewed] => 1
    )

[createdDate] => 2014-01-24T11:38:25.679Z
[modifiedDate] => 2014-01-24T11:38:25.569Z
[modifiedByMeDate] => 2014-01-24T11:38:25.569Z
[lastViewedByMeDate] => 2014-01-24T11:38:25.569Z
[parents] => Array
    (
        [0] => Array
            (
                [kind] => drive#parentReference
                [id] => 0AONwgyCI2GQEUk9PVA
                [selfLink] => https://www.googleapis.com/drive/v2/files/0B-NwgyCI2GQENkswOHVNcVl2aDQ/parents/0AONwgyCI2GQEUk9PVA
                [parentLink] => https://www.googleapis.com/drive/v2/files/0AONwgyCI2GQEUk9PVA
                [isRoot] => 1
            )

    )
[downloadUrl] => https://doc-04-60-docs.googleusercontent.com/docs/securesc/lptjog45u94o44tbsu1586vcuinvv74h/mlvse3i90c59eb4q6ggg7d4c6v6q4hfd/1390557600000/03476129820556261866/03476129820556261866/0B-NwgyCI2GQENkswOHVNcVl2aDQ?h=16653014193614665626&e=download&gd=true
    [userPermission] => Array
        (
            [kind] => drive#permission
            [etag] => "11QSOvUX6KZKZVB6nCB3GloLTJQ/-HVXFUAxHplEpHWK6MSWEcIX7d8"
            [id] => me
            [selfLink] => https://www.googleapis.com/drive/v2/files/0B-NwgyCI2GQENkswOHVNcVl2aDQ/permissions/me
            [role] => owner
            [type] => user
        )

    [originalFilename] => Any sample file title
    [fileExtension] => 
    [md5Checksum] => 2c06987d6ae9cfcd7060c68f4356231a
    [fileSize] => 31
    [quotaBytesUsed] => 31
    [ownerNames] => Array
        (
            [0] => sdsdsdswrwew@developer.myemail.com
        )

    [owners] => Array
        (
            [0] => Array
                (
                    [kind] => drive#user
                    [displayName] => dsdadasd3@developer.myemail.com
                    [isAuthenticatedUser] => 1
                    [permissionId] => 03476129820556261866
                )

        )

    [lastModifyingUserName] => 89989989889@developer.myemailid.com
    [lastModifyingUser] => Array
        (
            [kind] => drive#user
            [displayName] => my_display_name
            [isAuthenticatedUser] => 1
            [permissionId] => 03476129820556261866
        )

    [editable] => 1
    [copyable] => 1
    [writersCanShare] => 1
    [shared] => 
    [appDataContents] => 

..............

Now the main problem is that the files upload via this is not listing in my google drive files list but if I query for the availale files in my account I get only the file list uploaded via this api and not the one I created manually in the google drive interface.

See my code to get file list..

   .....................
            $client = new Google_Client();
            $key = file_get_contents(KEY_FILE);
            $client->setClientId(CLIENT_ID);
            $client->setAssertionCredentials(new Google_AssertionCredentials(
              SERVICE_ACCOUNT_NAME,
              array('https://www.googleapis.com/auth/drive'),
              $key)
            );

            $service = new Google_DriveService($client);
    ....................

            $files = $service->files->listFiles();

Now Questions:

  1. Why do the files not listed in my google drive list.
  2. Why the service account I created in google console is treated as like a different user. eg file list are different than original users and orignal user file are not listed in api listed files.

Please let me know where I am doing wrong, also let me know if what I am trying to achieve is possible or not. I have created a Service Account rather than Client ID for web application because the script will run automatically without any user interface.

Please suggest....

  • 写回答

1条回答 默认 最新

  • douwen4125 2014-01-24 12:28
    关注

    Why do the files not listed in my google drive list?

    Because they don't belong to you. They belong to the service account.

    Why the service account I created in google console is treated as like a different user.

    Because that is what a service account, ie. it's own user.

    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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么