0

我使用谷歌驱动器 api 插入文本文件...

构建服务

function buildService() {

$DRIVE_SCOPE = 'https://www.googleapis.com/auth/drive';
$SERVICE_ACCOUNT_EMAIL = 'xxxx@developer.gserviceaccount.com';

if($_SERVER['HTTP_HOST'] == 'localhost')
$SERVICE_ACCOUNT_PKCS12_FILE_PATH = 'xxxxxxxx-privatekey.p12';
else
$SERVICE_ACCOUNT_PKCS12_FILE_PATH = $_SERVER['DOCUMENT_ROOT'].'/xxxxx-privatekey.p12';

  $key = file_get_contents($SERVICE_ACCOUNT_PKCS12_FILE_PATH);
  $auth = new Google_AssertionCredentials(
      $SERVICE_ACCOUNT_EMAIL,
      array($DRIVE_SCOPE),
      $key);
  $client = new Google_Client();
  $client->setUseObjects(true);
  $client->setAssertionCredentials($auth);
  return new Google_DriveService($client);
}

检索文件

function retrieveAllFiles($service) {
  $result = array();
  $pageToken = NULL;

  do {
    try {
      $parameters = array();
      if ($pageToken) {
        $parameters['pageToken'] = $pageToken;
      }
      $files = $service->files->listFiles($parameters);

      $result = array_merge($result, $files->getItems());
      $pageToken = $files->getNextPageToken();
    } catch (Exception $e) {
      print "An error occurred: " . $e->getMessage();
      $pageToken = NULL;
    }
  } while ($pageToken);
  return $result;
}

创建实例并插入

$service = buildService();

$file = new Google_DriveFile();
$file->setTitle('My document');
$file->setDescription('A test document');
$file->setMimeType('text/plain');

$data = "contents";

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

print_r($createdFile);

echo '<br>------<br>';

检索文件

$ret = retrieveAllFiles($service);

echo '<pre>';
print_r($ret);
  1. 在第一次通话中,我插入了一个文件......

  2. 在第二次通话中,我试图列出所有文件......

  3. 当我尝试列出时,我只能看到插入的文件,但看不到其他我可以通过登录 docs.google.com 在我的驱动器中看到的文件。我已经有 6 个在线文件

  4. 根据文档,我使用私钥和服务帐户电子邮件创建了服务帐户。

那么该文件将存储在哪里以及如何列出谷歌驱动器根目录中的所有其他文件?

4

1 回答 1

1

您正在将文件插入由服务帐户表示的应用程序拥有的帐户中。

If you want to manage (insert/list/...) files in another domain user's Drive account, you'll have to perform Domain-wide delegation: https://developers.google.com/drive/delegation

于 2013-02-11T20:48:46.820 回答