Upload a file to Google Cloud, in a specific directory

前端 未结 6 1654
借酒劲吻你
借酒劲吻你 2021-02-04 04:31

How to upload a file on Google Cloud, in a specific bucket directory (e.g. foo)?

\"use strict\";

const gcloud = require(\"gcloud\");

const PROJECT         


        
相关标签:
6条回答
  • 2021-02-04 05:02

    UPDATE 2020

    according to google documentation:

    const { Storage } = require('@google-cloud/storage');
    const storage = new Storage()
    const bucket = storage.bucket('YOUR_GCLOUD_STORAGE_BUCKET')
    const blob = bucket.file('youFolder/' + 'youFileName.jpg')
    
    const blobStream = blob.createWriteStream({
        resumable: false,
        gzip: true,
        public: true
    })
    
    blobStream.on('error', (err) => {
        console.log('Error blobStream: ',err)
    });
    
    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)
        res.status(200).send(publicUrl);
    });
    
    blobStream.end(req.file.buffer)//req.file is your original file
    
    0 讨论(0)
  • 2021-02-04 05:14
    bucket.upload("1.jpg", { destination: "YOUR_FOLDER_NAME_HERE/1.jpg" }, (err, file) => {
        //Do something...
    });
    

    This will put 1.jpg in the YOUR_FOLDER_NAME_HERE-folder.

    Here is the documentation. By the way, gcloud is deprecated and you should use google-cloud instead.

    0 讨论(0)
  • 2021-02-04 05:14

    I think just adding foo/ to the filename should work, like bucket.upload("foo/1.jpg", (err, file) ... In GCS, directories just a matter of having a '/' in the file name.

    0 讨论(0)
  • 2021-02-04 05:15

    If accessing from the same project projectId , keyFilename,.. not required,I use the below code for both upload and download , it works fine.

    // Imports the Google Cloud client library
    const Storage = require('@google-cloud/storage');
    const storage = new Storage();
    var destFilename = "./test";
    var bucketName = 'cloudtesla';
    var srcFilename = 'test';
    
      const options = {
        destination: destFilename,
      };
    
    
    //upload file
    console.log("upload Started");
    storage.bucket(bucketName).upload(srcFilename, {}, (err, file) => {
    
            if(!err)
            console.log("upload Completed");
            else
            console.log(err);
    });
    
    
    //Download file
    console.log("Download Started");
      storage
        .bucket(bucketName)
        .file(srcFilename)
        .download(options)
        .then(() => {
          console.log("Download Completed");
        })
        .catch(err => {
          console.error('ERROR:', err);
        });
    
    0 讨论(0)
  • 2021-02-04 05:21

    Here you go...

    const options = {
      destination: 'folder/new-image.png',
      resumable: true,
      validation: 'crc32c',
      metadata: {
        metadata: {
          event: 'Fall trip to the zoo'
        }
      }
    };
    
    bucket.upload('local-image.png', options, function(err, file) {
      // Your bucket now contains:
      // - "new-image.png" (with the contents of `local-image.png')
    
      // `file` is an instance of a File object that refers to your new file.
    });
    
    0 讨论(0)
  • 2021-02-04 05:23

    If you want to use async-await while uploading files into storage buckets the callbacks won't do the job, Here's how I did it.

    async function uploadFile() {
        const destPath = 'PATH_TO_STORAGE/filename.extension';
    
        await storage.bucket("PATH_TO_YOUR_BUCKET").upload(newFilePath, {
            gzip: true,
            destination: destPath,  
        });
    }
    

    Hope it helps someone!

    0 讨论(0)
提交回复
热议问题