Google Drive API - 通过签名在自己的帐户中上传文件 - PHP

时间:2017-03-25 08:17:56

标签: php file-upload google-api-php-client

我有一个网站,其中用户填写表单,当他们点击保存时,我将该详细信息添加到数据库并创建该数据的csv。

我不想将csv保存在我的服务器中,而是希望将其保存到我自己的google驱动器中。

因此,我无法向用户显示登录弹出窗口,因为我不想在他们的帐户中上传,如何在不影响用户的情况下将该文件上传到我的帐户中(在后台)?

我在互联网上尝试了很多解决方案,例如"简单文件上传,服务帐户等等。"

我认为服务帐户服务可以帮助我,但没有得到任何适当的解决方案。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

请注意,如果您使用免费的 @ gmail.com 帐户,则无法进行此操作。为实现此目的,您需要拥有G Suite帐户,因为您需要启用Domain Wide Delegation。由于您没有发布任何有关您尝试过的解决方案的代码,因此我无法确切地说明您希望如何实现此目标;不过,这是一个上传CSV文件的例子。

<?php session_start(); 

require_once "vendor/autoload.php"; //include php client library

// define service account credentials
putenv('GOOGLE_APPLICATION_CREDENTIALS=service_account_credentials.json');

//set the required scopes
$scopes = array('https://www.googleapis.com/auth/drive');

$client= new Google_Client(); // Create client object
$client->useApplicationDefaultCredentials(); // Set service account credentials
$client->addScope($scopes); //Set scopes to client object
$client->setSubject("email@domain.com"); // impersonate user

$driveService = new Google_Service_Drive($client); // define service to be rquested

//Create new drive file metadata
$fileMetadata = new Google_Service_Drive_DriveFile(
  array('name' => 'PeopleList.csv') //set file name
);

//Construct CSV data
$content = array(
  array("Name", "Age", "Gender"), // CSV Header or First row
  array("John Doe", "27", "Male"), // Row 2
  array("Alex Wright", "24", "Female"), // Row 3
  array("Elli Smith", "25", "Female") // Row 4
);

$fileName = "CSV_Test.csv"; // define temp csv file name
$csvFile = fopen($fileName, 'w'); // open file to write on it

//save content to csv file
foreach ($content as $row) {
  fputcsv($csvFile, $row);
}

fclose($csvFile); // close csv file

$csvData = file_get_contents($fileName); //extract csv file data

//upload csv to drive
$file = $driveService->files->create($fileMetadata, array(
  'data' => $csvData,
  'mimeType' => 'text/csv',
  'uploadType' => 'multipart'
  )
);

//delete temp csv file
unlink($fileName);

print_r($file);

?>