当前位置: 首页 > 知识库问答 >
问题:

Google驱动器api文件已上传但未列出

韩涵衍
2023-03-14

我不熟悉google drive api..我正在从我的服务器上传文件到google drive。

在我的 gmail 帐户中,我有

>

  • 创建服务帐户,下载密钥并上传到服务器。
  • 提供对驱动Api和SDK Api的访问
  • 添加了一个与google通信的控制器:

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

    现在输出如下:

    [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] => 
    

    ……………

    现在的主要问题是,通过这个上传的文件没有在我的谷歌驱动器文件列表中列出,但如果我在我的帐户中查询可用文件,我只会得到通过这个api上传的文件列表,而不是我在谷歌驱动器界面中手动创建的文件列表。

    请参阅我的代码以获取文件列表。。

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

    现在的问题:

      < li >为什么我的google drive列表中没有列出这些文件。 < li >为什么我在google console中创建的服务帐户被视为不同的用户。eg文件列表不同于原始用户,原始用户文件没有列在api列出的文件中。

    请让我知道我哪里做错了,也让我知道我试图实现的目标是否可能。我创建了一个服务帐户,而不是Web应用程序客户端ID,因为脚本将在没有任何用户交互界面的情况下自动运行。

    请建议……

  • 共有2个答案

    闻人花蜂
    2023-03-14
    function updateFile ($service, $fileId, $newTitle, $newDescription, $newMimeType, $text) {
        try {
            // First retrieve the file from the API.
            $file = $service->files->get($fileId);
    
            // File's new metadata.
            $file->setName($newTitle);
            $file->setDescription($newDescription);
            $file->setMimeType($newMimeType);
    
            // File's new content.
            $additionalParams = array(
                'data' => $text,
                'uploadType' => 'media'
            );
    
            // Send the request to the API.
            $updatedFile = $service->files->update($fileId, $file, $additionalParams);
            return $updatedFile;
        } catch (Exception $e) {
            print "An error occurred: " . $e->getMessage();
        }
    }
    
    金泉
    2023-03-14

    为什么文件没有列在我的谷歌驱动器列表中?

    因为它们不属于你。它们属于服务帐户。

    为什么我在google控制台中创建的服务号被视为不同的用户。

    因为这就是服务号,即它自己的用户。

    如果您希望上传的文件位于您自己的驱动器内容中,则需要使用您自己的帐户凭据访问驱动器SDK。这不需要涉及用户交互。您只需一次性获取刷新令牌,然后使用该令牌生成驱动器的访问令牌。

     类似资料:
    • 我尝试的是下面的,但不是工作 从谷歌REST链接,它显示的例子如下,如何运行这个?

    • 问题内容: 使用此代码,我上传文件,但该文件作为文档上传。表示我上传该文件的任何类型都将作为文档上传到Google驱动器 问题答案: 据我所知(距离我查看已经有几个月了 ) ,谷歌驱动器API 还不支持(至今?) 。解决方法是考虑安装本机google驱动器共享,然后将要上传的文件写入本地映射的共享文件夹中。然后它的谷歌驱动器问题来处理上传。

    • 我正在尝试Google Drive API V3。 拥有一些共享驱动器文件夹的访问权限,并且是所有这些资源的管理员,我想获取一个通过查询筛选的特定文件夹。 出于任何原因,当我尝试按照留档建议插入查询时,它会响应一个错误,这个错误不是很描述性,也不利于调试: 此外,如果我不带条件地执行查询,则响应会成功,并显示整个共享驱动器: 有什么帮助吗? 谢谢

    • 问题内容: 我想按使用Google Drive API上传文件的百分比显示进度。 我的想法之前已经成功上传了文件,但是看不到上传进度。 我已经看到并添加了此FileUploadProgressListener,但仅显示0.0(进度开始)和1.0(进度完成时)。我无法及时获得进度的百分比。 如何使其运作? 这是我的上传代码: 问题答案: 要获得进度,您必须使用(而不是)和或必须是的倍数的任何值,否则

    • 这是我收到的错误