kostenloser Webspace werbefrei: lima-city


Datei in Google Cloud Storage hochladen in PHP server2server

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    otisoft

    otisoft hat kostenlosen Webspace.

    Hallo Leute,

    ich habe es wirklich mit Geduld versucht, aber es scheint nichts zu helfen. Ich möchte mit PHP (von lima-city direkt an Google, z.B. per Cronjob) eine Datei in ein Google Cloud Storage Bucket hochladen. Dazu fand ich nach direkter Googlesuche unter https://gist.github.com/AidanThreadgold/9997654 den folgenden Code:

    <?php
    require_once("src/Google/Client.php");
    require_once("src/Google/Service/Storage.php");
    /**
     * Connect to Google Cloud Storage API
     */
    $client = new Google_Client();
    $client->setApplicationName("App Name");
    // $stored_access_token - your cached oauth access token 
    if( $stored_access_token ) {
    	$client->setAccessToken( $stored_access_token );
    }
    $credential = new Google_Auth_AssertionCredentials(
    					"service account email address",
    					['https://www.googleapis.com/auth/devstorage.read_write'],
    					file_get_contents("path/to/private-key-certificate.p12")
    				);
    $client->setAssertionCredentials($credential);
    if($client->getAuth()->isAccessTokenExpired()) {
    	$client->getAuth()->refreshTokenWithAssertion($credential);
    	// Cache the access token however you choose, getting the access token with $client->getAccessToken()
    }
    /**
     * Upload a file to google cloud storage
     */
    $storage = new Google_Service_Storage($client);
    $file_name = "what you want your file to be named on Google Cloud Storage";
    $obj = new Google_Service_Storage_StorageObject();
    $obj->setName($file_name);
    $storage->objects->insert(
    	"bucket name",
    	$obj,
    	['name' => $file_name, 'data' => file_get_contents("local path of the file to upload"), 'uploadType' => 'media']
    );


    Da dachte ich mir: ok, das geht ja noch, probier ich's einfach mal. Dann aber einige Minuten später fand ich das:
    https://github.com/google/google-api-php-client/blob/master/UPGRADING.md#google_auth_assertioncredentials-has-been-removed --> Die Hälfte des gefundenen Scripts ist unbrauchbar, da Updates! :pissed:
    Nach weiterer Suche dann das: https://github.com/GoogleCloudPlatform/storage-getting-started-php/blob/master/app.php

    <?php
    /**
     * Copyright 2012 Google Inc.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *     http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    /**
     * Follow the instructions on https://github.com/google/google-api-php-client
     * to download, extract and include the Google APIs client library for PHP into
     * your project.
     */
    require_once 'google-api-php-client/autoload.php';
    session_start();
    /**
     * Visit https://console.developers.google.com to generate your
     * oauth2_client_id, oauth2_client_secret, and to register your
     * oauth2_redirect_uri.
     */
    $client = new Google_Client();
    $client->setApplicationName("Google Cloud Storage PHP Starter Application");
    $client->setClientId('YOUR_CLIENT_ID');
    $client->setClientSecret('YOUR_CLIENT_SECRET');
    $client->setRedirectUri('YOUR_REDIRECT_URI');
    $client->setDeveloperKey('YOUR_API_KEY');
    $client->setScopes('https://www.googleapis.com/auth/devstorage.full_control');
    $storageService = new Google_Service_Storage($client);
    /**
     * Constants for sample request parameters.
     */
    define('API_VERSION', 'v1');
    define('DEFAULT_PROJECT', 'YOUR_DEFAULT_PROJECT_ID');
    define('DEFAULT_BUCKET', 'YOUR_DEFAULT_BUCKET_NAME');
    define('DEFAULT_OBJECT', 'YOUR_DEFAULT_OBJECT_NAME');
    /**
     * Generates the markup for a specific Google Cloud Storage API request.
     * @param string $apiRequestName The name of the API request to process.
     * @param string $apiResponse The API response to process.
     * @return string Markup for the specific Google Cloud Storage API request.
     */
    function generateMarkup($apiRequestName, $apiResponse) {
      $apiRequestMarkup = '';
      $apiRequestMarkup .= "<header><h2>" . $apiRequestName . "</h2></header>";
      if ($apiResponse['items'] == '' ) {
        $apiRequestMarkup .= "<pre>";
        $apiRequestMarkup .= print_r(json_decode(json_encode($apiResponse), true),
          true);
        $apiRequestMarkup .= "</pre>";
      } else {
        foreach($apiResponse['items'] as $response) {
          $apiRequestMarkup .= "<pre>";
          $apiRequestMarkup .= print_r(json_decode(json_encode($response), true),
            true);
          $apiRequestMarkup .= "</pre>";
        }
      }
      return $apiRequestMarkup;
    }
    /**
     * Clear access token whenever a logout is requested.
     */
    if (isset($_REQUEST['logout'])) {
      unset($_SESSION['access_token']);
    }
    /**
     * Authenticate and set client access token.
     */
    if (isset($_GET['code'])) {
      $client->authenticate($_GET['code']);
      $_SESSION['access_token'] = $client->getAccessToken();
      $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
      header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
    }
    /**
     * Set client access token.
     */
    if (isset($_SESSION['access_token'])) {
      $client->setAccessToken($_SESSION['access_token']);
    }
    /**
     * If all authentication has been successfully completed, make Google
     * Cloud Storage API requests.
     */
    if ($client->getAccessToken()) {
      /**
       * Google Cloud Storage API request to retrieve the list of buckets in your
       * Google Cloud Storage project.
       */
      $buckets = $storageService->buckets->listBuckets(DEFAULT_PROJECT);
      $listBucketsMarkup = generateMarkup('List Buckets', $buckets);
      /**
       * Google Cloud Storage API request to retrieve the list of objects in your
       * Google Cloud Storage bucket.
       */
      $objects = $storageService->objects->listObjects(DEFAULT_BUCKET);
      $listObjectsMarkup = generateMarkup('List Objects', $objects);
      /**
       * Google Cloud Storage API request to retrieve the list of Access Control
       * Lists on your Google Cloud Storage buckets.
       */
      $bucketsAccessControls = $storageService->bucketAccessControls->
        listBucketAccessControls(DEFAULT_BUCKET);
      $listBucketsAccessControlsMarkup = generateMarkup(
        'List Buckets Access Controls', $bucketsAccessControls);
      /**
       * Google Cloud Storage API request to retrieve the list of Access Control
       * Lists on your Google Cloud Storage objects.
       */
      $objectsAccessControls = $storageService->objectAccessControls->
        listObjectAccessControls(DEFAULT_BUCKET, DEFAULT_OBJECT);
      $listObjectsAccessControlsMarkup = generateMarkup(
        'List Objects Access Controls', $objectsAccessControls);
      /**
       * Google Cloud Storage API request to retrieve a bucket from your
       * Google Cloud Storage project.
       */
      $bucket = $storageService->buckets->get(DEFAULT_BUCKET);
      $getBucketMarkup = generateMarkup('Get Bucket', $bucket);
      // The access token may have been updated lazily.
      $_SESSION['access_token'] = $client->getAccessToken();
    } else {
      $authUrl = $client->createAuthUrl();
    }
    ?>
    <!doctype html>
    <html>
      <head>
        <meta charset="utf-8">
      </head>
      <body>
        <header><h1>Google Cloud Storage Sample App</h1></header>
        <div class="main-content">
          <?php if(isset($listBucketsMarkup)): ?>
            <div id="listBuckets">
              <?php print $listBucketsMarkup ?>
            </div>
          <?php endif ?>
    
          <?php if(isset($listObjectsMarkup)): ?>
            <div id="listObjects">
              <?php print $listObjectsMarkup ?>
            </div>
          <?php endif ?>
    
          <?php if(isset($listBucketsAccessControlsMarkup)): ?>
            <div id="listBucketsAccessControls">
              <?php print $listBucketsAccessControlsMarkup ?>
            </div>
          <?php endif ?>
    
          <?php if(isset($listObjectsAccessControlsMarkup)): ?>
            <div id="listObjectsAccessControls">
              <?php print $listObjectsAccessControlsMarkup ?>
            </div>
          <?php endif ?>
    
          <?php if(isset($getBucketMarkup)): ?>
            <div id="getBucket">
              <?php print $getBucketMarkup ?>
            </div>
          <?php endif ?>
    
          <?php
            if(isset($authUrl)) {
              print "<a class='login' href='$authUrl'>Authorize Me!</a>";
            } else {
              print "<a class='logout' href='?logout'>Logout</a>";
            }
          ?>
        </div>
      </body>
    </html>


    Nachdem ich 2-mal drauf geschaut hatte wurde mir klar: da muss ich mich aber mit OAuth als End-User anmelden! Also auch nichts. Ich versuchte das Script umzubauen, aber ich stiess wieder auf "Google_Auth_AssertionCredentials has been removed"! Die angeblich neue Variante:

    $client->setAuthConfig('/path/to/service-account.json');


    funktionierte auch nicht. Nach einer Weile grübeln und sich aufregen, habe ich mich jetzt dazu entschieden hier im Forum zu fragen. Wenn jemand weiss wie es geht, es mir sagen, aber bitte keine Komentare wie: Das weiss doch jeder... oder so..

    Danke im Voraus
    otisoft
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Guten Abend,
    Google hat eine Excellente Dokumentation zu seinen API's in deinem Fall wäre das diese hier https://developers.google.com/drive/v2/web/auth/web-server. Let me google that for you

    PS: ich hab mehr Zeit auf die Suche nach "let me google that for you" verbracht, als bei der Suche nach der eigendlichen Lösung. :thumb:
    Bei Problemen kannst du dich ja nochmal melden :biggrin:
  4. Autor dieses Themas

    otisoft

    otisoft hat kostenlosen Webspace.

    Die Frage war zu Google Cloud Platform! Trotzdem Danke.

    Ich möchte nicht in das Google Drive des Nutzers speichern, sodern wie oben genannt in MEIN Bucket bei Google Cloud Platform Storage API!

    Beitrag zuletzt geändert: 4.11.2016 11:57:25 von otisoft
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!