skipper-gcstorage
v2.3.1
Published
A skipper adapter used for uploading files to Google Cloud Storage
Downloads
240
Maintainers
Readme
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-gcstorage
Option2: GitHub Package
$ npm i @chenglongma/skipper-gcstorage
Changelog
Ver 2.3.0
- Add
keepName
option 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
writefile
event when finishing the job. - Support additional
CreateWriteStreamOptions
listed in https://googleapis.dev/nodejs/storage/latest/global.html#CreateWriteStreamOptions.
Ver 2.0.0
- 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,
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-GCStorage
will create new bucket if specified one does not exist.- Assign bucket metadata into
bucketMetadata
.
- Assign bucket metadata into
- Support multiple ways for Authentication
- Specify
projectId
ANDkeyFilename
; export
GOOGLE_APPLICATION_CREDENTIALS
environment 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.txt
in the bucketyour-bucket
, the path to the object isyour-bucket/folder1/file.txt
, but there is no folder namedfolder1
; instead, the stringfolder1
is part of the object's name. Please refer to https://cloud.google.com/storage/docs/folders
Acknowledgement
Contribution
Pull requests are welcome!