Uploading files to Google Cloud Storage from Localhost or external server

前端 未结 3 1294
无人及你
无人及你 2021-01-22 10:20

I want to upload files to Google Cloud Storage (Bucket) through my PHP or JavaScript application which is hosted in my localhost or external server.

As I tried the Goog

3条回答
  •  清歌不尽
    2021-01-22 11:07

    In order to upload files to Google Cloud Storage from outside of App Engine or from your external server you have to install the client library of the programming language you use.

    Step 1:
    Create a Google Service Account Key from the below URL and download the json file which has all of your crenditial information to login from the client PC.
    https://console.cloud.google.com/apis/credentials

    Step 2:


    PHP:

    Install composer require google/cloud-storage

     $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().'
    '; } 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; } ?>


    JavaScript (NodeJs):

    Install npm install --save @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(`
    * ${file.name}
    `); 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.'); });

    Refer example https://github.com/aslamanver/google-cloud-nodejs-client

提交回复
热议问题