2017-03-25 6 views
1

私はユーザーがフォームを記入するウェブサイトを持っており、クリックするとその詳細をデータベースに追加し、そのデータのcsvを作成します。GoogleドライブAPI - 自分のアカウントにファイルのアップロードwithougの署名 - PHP

サーバーにそのCSVを保存したくない代わりに、自分のGoogleドライブに保存したいと思います。

アカウントにアップロードしたくないため、ログインポップアップを表示することはできません。ユーザーを邪魔することなくアカウント内のファイルをアップロードするにはどうすればよいですか(バックグラウンドで)?

「シンプルファイルアップロード、サービスアカウントなど」のようなインターネット上で多くのソリューションを試しましたが、

私はここでサービスアカウントサービスは私を助けてくれるが、適切な解決策が得られないと思う。

ご協力いただければ幸いです。

+0

私はAPI https://developers.google.com/drive/v3/web/manage-uploadsのドキュメントを参照します。 PHPの例を見てください。 – Thomas

答えて

0

無料の@ gmail.comアカウントをご利用の場合、これはできませんのでご注意ください。これを実現するには、を有効にする必要があるため、G Suiteアカウントが必要です。試したソリューションに関するコードを投稿していないので、これを達成する方法を正確に伝えることはできません。それにもかかわらず、ここに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 protected]"); // 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); 

?> 
+0

こんにちは@モーフィニズム ありがとうございました。 私はGsuiteアカウントを作成しました。試した私とあなたのコード(ミックスアップ) 今、私はエラーを取得していません。 アップロードしたファイルはどこに表示されますか? 私のGsuiteアカウントのドライブには表示されません。 ここをクリックしてください - http://stackoverflow.com/questions/21332267/google-drive-api-file-uploaded-but-not-listed?rq=1 アップロードされたファイルは見えませんサービスベースのアカウント。 それを使用する意味は何ですか? 助けてもらえますか? –

+0

@vatsalshah理由はあなたのユーザーを偽装していないためG Suiteアカウントに表示されていません。この行にメールアドレスを入れてください。$ client-> setSubject( "[email protected]"); '。ユーザーを偽装しないと、サービスアカウントにファイルをアップロードするのではなく、サービスアカウントにファイルをアップロードします。それは問題を解決するはずです。 – Morfinismo

関連する問題