2.3.1 • Published 3 years ago
skipper-gcstorage v2.3.1
Google Cloud Storage Blob Adapter
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 i skipper-gcstorageOption2: GitHub Package
$ npm i @chenglongma/skipper-gcstorageChangelog
Ver 2.3.0
- Add
keepNameoption which can set whether to use original filename or a generated UUID name. - Update dependencies to the latest version.
Ver 2.2.0
- Update dependencies to the latest version.
- sharp: 0.29.2, now it supports M1 chipset ( thanks lahiruelectrily (github.com))
- mime: 3.0.0
Ver 2.1.0
Thanks jspark-gigworks (Anselmo Park) so much for his comments!
- Emit
writefileevent when finishing the job. - Support additional
CreateWriteStreamOptionslisted in https://googleapis.dev/nodejs/storage/latest/global.html#CreateWriteStreamOptions.
Ver 2.0.0
- Add
resizeoptions, 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,
keepName: false,
// 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 :)
Parameters
| Name | Type | Required | Default Value | Description |
|---|---|---|---|---|
| bucket | string | Yes | None | Bucket name in GCP, will create new one if there is no such bucket. |
| projectId | string | Yes if keyFilename is specified | None, will try to read process.env.GOOGLE_CLOUD_PROJECT if not set | "GOOGLE_CLOUD_PROJECT", please refer to Google Cloud Storage#using-the-client-library |
| keyFilename | string | No | None, will try to read process.env.GOOGLE_APPLICATION_CREDENTIALS if not set | "/path/to/GOOGLE_APPLICATION_CREDENTIALS.json" |
| bucketMetadata | dictionary | No | {} | Metadata to set for the bucket. Refer to Google Cloud Storage#CreateBucketRequest |
| metadata | dictionary | No | {} | Extra info attached to the file |
| public | boolean | No | true | Whether to make the file public |
| keepName | boolean or string | No | false | Whether to use original filename. The uploaded file will be set to: a UUID name if keepName=false; its original name if keepName=true; * the value of keepName if keepName is a string |
| ...CreateWriteStreamOptions | expanded dictionary | No | {} | Options for File#createWriteStream(). Refer to Google Cloud Storage#CreateWriteStreamOptions |
| resize | dictionary with keys width and height | No | {} | The new size of image. Only works when the file is an image. Refer to sharp#resize. |
NOTE
Skipper-GCStoragewill create new bucket if specified one does not exist.- Assign bucket metadata into
bucketMetadata.
- Assign bucket metadata into
- Support multiple ways for Authentication
- Specify
projectIdANDkeyFilename; exportGOOGLE_APPLICATION_CREDENTIALSenvironment variable;- Login with an eligible service account;
- *For more details, please refer to https://cloud.google.com/docs/authentication/production#command-line.
- Specify
- Use with sails-hook-uploads for better results :)
Cloud Storage operates with a flat namespace, which means that folders don't actually exist within Cloud Storage. If you create an object named
folder1/file.txtin the bucketyour-bucket, the path to the object isyour-bucket/folder1/file.txt, but there is no folder namedfolder1; instead, the stringfolder1is part of the object's name. Please refer to https://cloud.google.com/storage/docs/folders
Acknowledgement
Contribution
Pull requests are welcome!

