2
votes

Importer des fichiers sur Google Cloud Storage depuis Localhost ou un serveur externe

Je souhaite importer des fichiers sur Google Cloud Storage (Bucket) via mon application PHP ou JavaScript qui est hébergée sur mon hôte local ou sur mon serveur externe.

Comme j'ai essayé le Google Cloud Storage a le support dédié pour télécharger des fichiers depuis Google App Engine mais ce n'est pas ce que je veux réaliser.

Depuis que je suis passé par ce lien qui donne une idée sur les API Google JSON : https://cloud.google.com/storage / docs / json_api / v1 / how-tos / simple-upload

Cependant, ce n'est pas une ressource utile comme je l'ai essayé.

Scénario: strong>

J'ai une application PHP localhost avec un formulaire HTML de bouton de téléchargement de fichier, une fois que j'ai soumis le formulaire, il doit télécharger le fichier choisi dans mon Google Bucket avec cURL - API ou tout script côté client. p>

// Like below I want to send to Google Bucket
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)

Les guides pacifiques sont plus appréciés que les votes négatifs.


0 commentaires

3 Réponses :


0
votes

Vous pouvez le faire en créant une URL de téléchargement. Avec cela, un utilisateur peut télécharger des fichiers sur GCS en utilisant un formulaire HTML, vérifiez cette documentation . Il a toutes les informations pour le faire en utilisant PHP.


1 commentaires

Merci mais j'ai besoin d'un exemple



2
votes

Pour importer des fichiers sur Google Cloud Storage depuis l'extérieur d'App Engine ou depuis votre serveur externe, vous devez installer la bibliothèque cliente du langage de programmation que vous utilisez.

Étape 1:
Créez une clé de compte de service Google à partir de l'URL ci-dessous et téléchargez le fichier json contenant toutes vos informations initiales pour vous connecter à partir du PC client.
https://console.cloud.google.com/apis/credentials

Étape 2:


Installez composer requiert google / cloud-storage

'use strict';

const express = require('express');
const formidable = require('formidable');
const fs = require('fs');
const path = require('path');

const { Storage } = require('@google-cloud/storage');
const Multer = require('multer');

const CLOUD_BUCKET = process.env.GCLOUD_STORAGE_BUCKET || 'bucket_name';
const PROJECT_ID = process.env.GCLOUD_STORAGE_BUCKET || 'project_id';
const KEY_FILE = process.env.GCLOUD_KEY_FILE || 'service_account_key_file.json';
const PORT = process.env.PORT || 8080;

const storage = new Storage({
  projectId: PROJECT_ID,
  keyFilename: KEY_FILE
});

const bucket = storage.bucket(CLOUD_BUCKET);

const multer = Multer({
  storage: Multer.MemoryStorage,
  limits: {
    fileSize: 2 * 1024 * 1024 // no larger than 5mb
  }
});

const app = express();

app.use('/blog', express.static('blog/dist'));

app.get('/', async (req, res) => {

  console.log(process.env);

  const [files] = await bucket.getFiles();

  res.writeHead(200, { 'Content-Type': 'text/html' });

  files.forEach(file => {
    res.write(`<div>* ${file.name}</div>`);
    console.log(file.name);
  });

  return res.end();

});

app.get("/gupload", (req, res) => {
  res.sendFile(path.join(`${__dirname}/index.html`));
});

// Process the file upload and upload to Google Cloud Storage.
app.post("/pupload", multer.single("file"), (req, res, next) => {

  if (!req.file) {
    res.status(400).send("No file uploaded.");
    return;
  }

  // Create a new blob in the bucket and upload the file data.
  const blob = bucket.file(req.file.originalname);

  // Make sure to set the contentType metadata for the browser to be able
  // to render the image instead of downloading the file (default behavior)
  const blobStream = blob.createWriteStream({
    metadata: {
      contentType: req.file.mimetype
    }
  });

  blobStream.on("error", err => {
    next(err);
    return;
  });

  blobStream.on("finish", () => {
    // The public URL can be used to directly access the file via HTTP.
    const publicUrl = `https://storage.googleapis.com/${bucket.name}/${blob.name}`;

    // Make the image public to the web (since we'll be displaying it in browser)
    blob.makePublic().then(() => {
      res.status(200).send(`Success!\n Image uploaded to ${publicUrl}`);
    });
  });

  blobStream.end(req.file.buffer);

});

// Start the server
app.listen(PORT, () => {
  console.log(`App listening on port ${PORT}`);
  console.log('Press Ctrl+C to quit.');
});


JavaScript (NodeJs):

Installez npm install --save @ google-cloud / storage

<?php

# Includes the autoloader for libraries installed with composer
require __DIR__ . '/vendor/autoload.php';

use Google\Cloud\Storage\StorageClient;
use google\appengine\api\cloud_storage\CloudStorageTools;

# Your Google Cloud Platform project ID
$projectId = 'your_project_id';

# Instantiates a client
$storage = new StorageClient([
    'projectId' => $projectId,
    'keyFilePath' => 'service_account_key_json_file.json'
]);

# The name for the bucket
$bucket = $storage->bucket('bucket_name');

foreach ($bucket->objects() as $object) {
    echo "https://storage.googleapis.com/".$bucket->name()."/".$object->name().'<br>';
}

if(isset($_POST['submit'])) {

    $file = file_get_contents($_FILES['file']['tmp_name']);
    $objectName = $_FILES["file"]["name"];

    $object = $bucket->upload($file, [
        'name' => $objectName
    ]);

    echo "https://storage.googleapis.com/".$bucket->name()."/".$objectname;
}
?>

Consultez l'exemple https: / /github.com/aslamanver/google-cloud-nodejs-client


0 commentaires

0
votes

J'ai écrit un package pour télécharger / obtenir un fichier local et l'importer sur Google Cloud Storage, peut-être que cela vous aidera: https://github.com/jeansouzak/duf

use JeanSouzaK\Duf\Duff;
use JeanSouzaK\Duf\Prepare\WebResource;
use JeanSouzaK\Duf\Prepare\LocalResource;

$duf = Duff::getInstance(Duff::GOOGLE_CLOUD_STORAGE, [
    'project_id' => 'storage-test-227305',
    'key_path' => '/home/env/storage-test-227305-8472347a39489.json'
]);

// - Chaining example -
$uploadResults = $duf->prepare([
    new LocalResource('imagem', '/home/test/images/test.jpg'),
    new WebResource('teste.png', 'https://dummyimage.com/600x400/000/fff')
])->download()->addBucket('your-bucket-name')->upload();

p >


0 commentaires