how to upload google drive to voicethread
Posted 4 years agone Past
100410
Laravel PHP Create Folder and Upload file to google drive with admission token
In this Laravel PHP tutorial, I will tell yous how to upload file on Google drive using Google bulldoze API.
I accept already discussed about Login authentication with Google APIs, You tin follow this link to become access token after successfully hallmark with Google OAuth2 API.
For this example, I need refresh token for permanent access to Google APIs because Access token have limited lifetime that ways you will have to echo the OAuth 2.0 consent flow to cosign user, but If you have refresh token then you tin can utilise this refresh token to obtain a new access token.
At the fourth dimension of initial authorization request only, Google provide refresh token but to obtain refresh token yous will have to specify offline access like this :
$this->gClient->setAccessType("offline"); $this->gClient->setApprovalPrompt("force"); You volition take to enable Google Drive API with your Google account.
Y'all need to accept client_id, client_secret and api_key for this example.
First I will become with fresh installation by running post-obit command :
composer create-projection --prefer-dist laravel/laravel weblog "5.4.*"Stride 2 : User Table
Now I will create User table to store token afterward authentication with Google for future access.
When yous install fresh Laravel application and then you lot will have migration file for users tabular array by default in following path database/migrations.
Now add a column "access_token" in users migration file to save access token for each user after authentication with Google APIs.
- public role up ()
- {
- Schema:: create ( 'users' , function (Pattern $table ) {
- $table -> increments ( 'id' );
- $tabular array -> string ( 'proper name' );
- $table -> string ( 'email' )-> unique ();
- $table -> string ( 'password' );
- $table -> text ( 'access_token' );
- $table -> rememberToken ();
- $table -> timestamps ();
- } );
- }
public function upwardly() { Schema::create('users', office (Blueprint $table) { $tabular array->increments('id'); $table->cord('name'); $table->string('email')->unique(); $table->string('password'); $tabular array->text('access_token'); $table->rememberToken(); $table->timestamps(); }); } Put above code in users migration file and run following command to create table in your database :
php artisan migratePace iii : Install Google Client Library
In this footstep, I will install the Google Client library past using composer, Add together post-obit line in your composer.json file :
"crave": { .... "google/apiclient": "2.0.*" } At present update your composer by running following command :
composer updateStep four : Add Routes
Now nosotros will add some routes for this instance :
routes/spider web.phpRoute::become('glogin',array('as'=>'glogin','uses'=>'UserController@googleLogin')) ; Route::mail service('upload-file',assortment('as'=>'upload-file','uses'=>'UserController@uploadFileUsingAccessToken')) ; Step 5 : User Controller In this UserController, We have 2 method with constructor. In constructor, I will ascertain the authorized Google client object.
googleLogin() method is used to authenticate user and save access token of that user in a "users" table.
uploadFileUsingAccessToken() method is used to upload file to user's google bulldoze business relationship merely before uploading files or creating folder, Nosotros volition check if access token is expired then generate new one with the help of refresh token.
- <?php
- namespace App\Http\Controllers;
- employ Illuminate\Http\Request;
- utilise App\Http\Controllers\Controller;
- utilize App\User;
- grade UserController extends Controller
- {
- public $gClient ;
- public function __construct () {
- $google_redirect_url = route ( 'glogin' );
- $this ->gClient = new \ Google_Client ();
- $this ->gClient-> setApplicationName ( config ( 'services.google.app_name' ));
- $this ->gClient-> setClientId ( config ( 'services.google.client_id' ));
- $this ->gClient-> setClientSecret ( config ( 'services.google.client_secret' ));
- $this ->gClient-> setRedirectUri ( $google_redirect_url );
- $this ->gClient-> setDeveloperKey ( config ( 'services.google.api_key' ));
- $this ->gClient-> setScopes ( assortment (
- 'https://www.googleapis.com/auth/drive.file' ,
- 'https://www.googleapis.com/auth/drive'
- ));
- $this ->gClient-> setAccessType ( "offline" );
- $this ->gClient-> setApprovalPrompt ( "force" );
- }
- public part googleLogin (Asking $request ) {
- $google_oauthV2 = new \ Google_Service_Oauth2 ( $this ->gClient);
- if ( $request -> get ( 'code' )) {
- $this ->gClient-> authenticate ( $asking -> get ( 'code' ));
- $request -> session ()-> put ( 'token' , $this ->gClient-> getAccessToken ());
- }
- if ( $request -> session ()-> get ( 'token' ))
- {
- $this ->gClient-> setAccessToken ( $request -> session ()-> get ( 'token' ));
- }
- if ( $this ->gClient-> getAccessToken ())
- {
- $user =User:: observe ( 1 );
- $user ->access_token= json_encode ( $request -> session ()-> become ( 'token' ));
- $user -> salvage ();
- dd ( "Successfully authenticated" );
- } else
- {
- $authUrl = $this ->gClient-> createAuthUrl ();
- return redirect ()-> to ( $authUrl );
- }
- }
- public role uploadFileUsingAccessToken () {
- $service = new \ Google_Service_Drive ( $this ->gClient);
- $user =User:: notice ( i );
- $this ->gClient-> setAccessToken ( json_decode ( $user ->access_token,true));
- if ( $this ->gClient-> isAccessTokenExpired ()) {
- $refreshTokenSaved = $this ->gClient-> getRefreshToken ();
- $this ->gClient-> fetchAccessTokenWithRefreshToken ( $refreshTokenSaved );
- $updatedAccessToken = $this ->gClient-> getAccessToken ();
- $updatedAccessToken [ 'refresh_token' ] = $refreshTokenSaved ;
- $this ->gClient-> setAccessToken ( $updatedAccessToken );
- $user ->access_token= $updatedAccessToken ;
- $user -> save ();
- }
- $fileMetadata = new \ Google_Service_Drive_DriveFile ( assortment (
- 'proper name' => 'ExpertPHP' ,
- 'mimeType' => 'application/vnd.google-apps.binder' ));
- $binder = $service ->files-> create ( $fileMetadata , assortment (
- 'fields' => 'id' ));
- printf ( "Folder ID: %s\north" , $folder ->id);
- $file = new \ Google_Service_Drive_DriveFile ( array (
- 'name' => 'cdrfile.jpg' ,
- 'parents' => array ( $binder ->id)
- ));
- $result = $service ->files-> create ( $file , assortment (
- 'information' => file_get_contents ( public_path ( 'images/myimage.jpg' )),
- 'mimeType' => 'application/octet-stream' ,
- 'uploadType' => 'media'
- ));
- $url = 'https://drive.google.com/open?id=' . $upshot ->id;
- dd ( $result );
- }
- }
<?php namespace App\Http\Controllers; apply Illuminate\Http\Request; employ App\Http\Controllers\Controller; use App\User; class UserController extends Controller { public $gClient; public function __construct(){ $google_redirect_url = route('glogin'); $this->gClient = new \Google_Client(); $this->gClient->setApplicationName(config('services.google.app_name')); $this->gClient->setClientId(config('services.google.client_id')); $this->gClient->setClientSecret(config('services.google.client_secret')); $this->gClient->setRedirectUri($google_redirect_url); $this->gClient->setDeveloperKey(config('services.google.api_key')); $this->gClient->setScopes(array( 'https://world wide web.googleapis.com/auth/drive.file', 'https://www.googleapis.com/auth/drive' )); $this->gClient->setAccessType("offline"); $this->gClient->setApprovalPrompt("force"); } public role googleLogin(Request $request) { $google_oauthV2 = new \Google_Service_Oauth2($this->gClient); if ($request->get('code')){ $this->gClient->authenticate($request->go('code')); $request->session()->put('token', $this->gClient->getAccessToken()); } if ($asking->session()->get('token')) { $this->gClient->setAccessToken($asking->session()->become('token')); } if ($this->gClient->getAccessToken()) { //For logged in user, become details from google using acces $user=User::find(1); $user->access_token=json_encode($request->session()->get('token')); $user->save(); dd("Successfully authenticated"); } else { //For Guest user, get google login url $authUrl = $this->gClient->createAuthUrl(); return redirect()->to($authUrl); } } public function uploadFileUsingAccessToken(){ $service = new \Google_Service_Drive($this->gClient); $user=User::notice(1); $this->gClient->setAccessToken(json_decode($user->access_token,true)); if ($this->gClient->isAccessTokenExpired()) { // save refresh token to some variable $refreshTokenSaved = $this->gClient->getRefreshToken(); // update admission token $this->gClient->fetchAccessTokenWithRefreshToken($refreshTokenSaved); // // pass access token to some variable $updatedAccessToken = $this->gClient->getAccessToken(); // // append refresh token $updatedAccessToken['refresh_token'] = $refreshTokenSaved; //Prepare the new acces token $this->gClient->setAccessToken($updatedAccessToken); $user->access_token=$updatedAccessToken; $user->save(); } $fileMetadata = new \Google_Service_Drive_DriveFile(array( 'proper noun' => 'ExpertPHP', 'mimeType' => 'application/vnd.google-apps.folder')); $binder = $service->files->create($fileMetadata, array( 'fields' => 'id')); printf("Folder ID: %s\n", $folder->id); $file = new \Google_Service_Drive_DriveFile(assortment( 'name' => 'cdrfile.jpg', 'parents' => array($folder->id) )); $upshot = $service->files->create($file, assortment( 'data' => file_get_contents(public_path('images/myimage.jpg')), 'mimeType' => 'application/octet-stream', 'uploadType' => 'media' )); // go url of uploaded file $url='https://drive.google.com/open?id='.$event->id; dd($result); } } silversteinonch1942.blogspot.com
Source: http://www.expertphp.in/article/laravel-php-create-folder-and-upload-file-to-google-drive-with-access-token
Post a Comment for "how to upload google drive to voicethread"