Igor Ferreira
Igor Ferreira

Reputation: 35

Write file and then upload to cloud storage - NodeJS

I'm trying to upload a file to my bucket after it's written but I'm not sure how to do it.

I confirm that code to write the file is ok as I tested it locally and it's working normally.

bucket.upload doesn't seem to work as the file is saved locally. bucket.file.save is also not working

the file is saved at "./public/fileName.xlsx".

When I use:

storage.bucket("bucketName").file("bucketFileName").save("./public/fileName.xlsx")

There's indeed a file been uploaded to the storage, but its content is the path string that I'm passing inside .save()

So to resume my question is: How do I write a file and then upload it to my bucket?

ps: the file is an excel worksheet

Upvotes: 1

Views: 1607

Answers (1)

Marc Anthony B
Marc Anthony B

Reputation: 4099

If you confirmed that the file is saved locally and just want to upload it to the bucket, you may refer to the sample code below:

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

const storage = new Storage();
// Change to your bucket name
const bucketName = 'bucket-name';

async function uploadFile(path, filename) {
  // Path where to save the file in Google Cloud Storage.
  const destFileName = `public/${filename}`;

  const options = {
    destination: destFileName,
    // Optional:
    // Set a generation-match precondition to avoid potential race conditions
    // and data corruptions. The request to upload is aborted if the object's
    // generation number does not match your precondition. For a destination
    // object that does not yet exist, set the ifGenerationMatch precondition to 0
    // If the destination object already exists in your bucket, set instead a
    // generation-match precondition using its generation number.
    preconditionOpts: {ifGenerationMatch: generationMatchPrecondition},
  };
  // The `path` here is the location of the file that you want to upload.
  await storage.bucket(bucketName).upload(path, options);
  console.log(`${path} uploaded to ${bucketName}`);
}

uploadFile('./public/fileName.xlsx', 'fileName.xlsx').catch(console.error);

Added some comments on the sample code. For more information, you may check this documentation.

Upvotes: 2

Related Questions