skipper-gcstorage

A skipper adapter used for uploading files to Google Cloud Storage

Usage no npm install needed!

<script type="module">
  import skipperGcstorage from 'https://cdn.skypack.dev/skipper-gcstorage';
</script>

README

skipper emblem - face of a ship's captain Google Cloud Storage Blob Adapter

npm version License: MIT

Google Cloud Storage adapter for receiving upstreams. Particularly useful for handling streaming multipart file uploads from the Skipper body parser.

Installation

Option 1: NPM Package

NPM

$ npm i skipper-gcstorage

Option2: GitHub Package

GitHub

$ npm i @chenglongma/skipper-gcstorage

Changelog

Ver 2.2.0

  1. Update dependencies to the latest version.
    1. sharp: 0.29.2, now it supports M1 chipset (thanks lahiruelectrily (github.com))
    2. mime: 3.0.0

Ver 2.1.0

Thanks jspark-gigworks (Anselmo Park) so much for his comments!

  1. Emit writefile event when finishing the job.
  2. Support additional CreateWriteStreamOptions listed in https://googleapis.dev/nodejs/storage/latest/global.html#CreateWriteStreamOptions.

Ver 2.0.0

  1. Add resize options, which can compress the images before uploading.

Usage

req.file('avatar')
.upload({
  // Required
  adapter: require('skipper-gcstorage'),
  bucket: 'existing_or_new_bucket_name', // Will create new one if no such bucket exists.
  // Optional
  projectId: 'GOOGLE_CLOUD_PROJECT', // Mandatory if `keyFilename` was specified.
  keyFilename: '/path/to/GOOGLE_APPLICATION_CREDENTIALS.json', 
  bucketMetadata: {
    location: 'us-west1',
  },  // Refer to https://googleapis.dev/nodejs/storage/latest/global.html#CreateBucketRequest
  maxBytes: 60000, 
  metadata: {},
  public: true,
  gzip: true,
  // Other options in `CreateWriteStreamOptions`
  // Refer to https://googleapis.dev/nodejs/storage/latest/global.html#CreateWriteStreamOptions
  ...CreateWriteStreamOptions,
  resize: {
    width: 500,
    height: 500
  }, // Refer to https://sharp.pixelplumbing.com/api-resize#resize
}, function whenDone(err, uploadedFiles) {
  if (err) {
    return res.serverError(err);
  }
  return res.ok({
    files: uploadedFiles,
    textParams: req.params.all()
  });
});

Please don't check in your GCP credentials :)

NOTE

  1. Skipper-GCStorage will create new bucket if specified one does not exist.
    1. Assign bucket metadata into bucketMetadata.
  2. Support multiple ways for Authentication
    1. Specify projectId AND keyFilename;
    2. export GOOGLE_APPLICATION_CREDENTIALS environment variable;
    3. Login with an eligible service account;
    4. *For more details, please refer to https://cloud.google.com/docs/authentication/production#command-line.
  3. Use with sails-hook-uploads for better results :)

Acknowledgement

  1. Sails Skipper
  2. Skipper-S3
  3. jspark-gigworks (Anselmo Park)