亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用帶有訪問令牌的php將文件上傳到谷歌驅動器

如何使用帶有訪問令牌的php將文件上傳到谷歌驅動器

PHP
慕的地6264312 2021-11-13 16:20:18
我正在嘗試使用 php 和 curl 將文件上傳到我的谷歌驅動器帳戶。我不想要所有這些長身份驗證流程的東西。為此,我實現了下面的代碼$secret ="xxxxxx";$clientid  ="xxxxxxx";$ch = curl_init ();curl_setopt_array ( $ch, array (CURLOPT_URL => "https://www.googleapis.com/upload/drive/v3/files?uploadType=media&clientID=xxxxxxx&secret=xxxxxxx",CURLOPT_HTTPHEADER => array ('Content-Type: image/png'),CURLOPT_POST => 1,CURLOPT_POSTFIELDS => file_get_contents ('iconc.png' ), CURLOPT_RETURNTRANSFER => 1 ) );$res = curl_exec($ch); $err = curl_error($ch);echo $res;var_dump($res);echo "<br>";echo "<br>";echo $err ;我已經啟用了我的 google Drive Api 并且我已經分配了客戶端 ID和密碼,但是當我運行代碼時,它說憑據無效,如下所示{ "error": { "errors": [ { "domain": "global", "reason": "required", "message": "Login Required", "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Login Required" } } string(238) "{ "error": { "errors": [ { "domain": "global", "reason": "required", "message": "Login Required", "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Login Required" } } "請問我在哪里傳遞上面代碼中的客戶端ID和密碼,或者我是否需要訪問令牌之類的東西。如果是,我從哪里獲得谷歌驅動器 API 訪問令牌。歡迎任何解決方案。謝謝
查看完整描述

1 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

您有兩個選擇,第一個是將訪問令牌添加到請求中


https://www.googleapis.com/upload/drive/v3/files?access_token={YourToken}

第二種是在請求中作為header添加


curl -H 'Accept: application/json' -H "Authorization: Bearer ${TOKEN}" 

https://www.googleapis.com/upload/drive/v3/files

像您在此處所做的那樣使用客戶端 IDclientID=xxxxxxx&secret=xxxxxxx是基本授權,而不是 Oauth2,您缺少授權步驟。


您應該考慮在此處遵循 php 快速入門


<?php

require __DIR__ . '/vendor/autoload.php';


if (php_sapi_name() != 'cli') {

    throw new Exception('This application must be run on the command line.');

}


/**

 * Returns an authorized API client.

 * @return Google_Client the authorized client object

 */

function getClient()

{

    $client = new Google_Client();

    $client->setApplicationName('Google Drive API PHP Quickstart');

    $client->setScopes(Google_Service_Drive::DRIVE_METADATA_READONLY);

    $client->setAuthConfig('credentials.json');

    $client->setAccessType('offline');

    $client->setPrompt('select_account consent');


    // Load previously authorized token from a file, if it exists.

    // The file token.json stores the user's access and refresh tokens, and is

    // created automatically when the authorization flow completes for the first

    // time.

    $tokenPath = 'token.json';

    if (file_exists($tokenPath)) {

        $accessToken = json_decode(file_get_contents($tokenPath), true);

        $client->setAccessToken($accessToken);

    }


    // If there is no previous token or it's expired.

    if ($client->isAccessTokenExpired()) {

        // Refresh the token if possible, else fetch a new one.

        if ($client->getRefreshToken()) {

            $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());

        } else {

            // Request authorization from the user.

            $authUrl = $client->createAuthUrl();

            printf("Open the following link in your browser:\n%s\n", $authUrl);

            print 'Enter verification code: ';

            $authCode = trim(fgets(STDIN));


            // Exchange authorization code for an access token.

            $accessToken = $client->fetchAccessTokenWithAuthCode($authCode);

            $client->setAccessToken($accessToken);


            // Check to see if there was an error.

            if (array_key_exists('error', $accessToken)) {

                throw new Exception(join(', ', $accessToken));

            }

        }

        // Save the token to a file.

        if (!file_exists(dirname($tokenPath))) {

            mkdir(dirname($tokenPath), 0700, true);

        }

        file_put_contents($tokenPath, json_encode($client->getAccessToken()));

    }

    return $client;

}



// Get the API client and construct the service object.

$client = getClient();

$service = new Google_Service_Drive($client);


// Print the names and IDs for up to 10 files.

$optParams = array(

  'pageSize' => 10,

  'fields' => 'nextPageToken, files(id, name)'

);

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


if (count($results->getFiles()) == 0) {

    print "No files found.\n";

} else {

    print "Files:\n";

    foreach ($results->getFiles() as $file) {

        printf("%s (%s)\n", $file->getName(), $file->getId());

    }

}


查看完整回答
反對 回復 2021-11-13
  • 1 回答
  • 0 關注
  • 136 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號