1.1.1 • Published 4 years ago

@duplexsi/multer-storage-google-cloud v1.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
4 years ago

Google Cloud Multer Storage Engine

Lightweight, stream-based implementation of a Multer storage engine for storing uploaded files in a Google Cloud bucket built with TypeScript.

Installation

Npm: npm i -S @duplexsi/multer-storage-google-cloud

Yarn: yarn add @duplexsi/multer-storage-google-cloud

Usage & Example

For a full working example see test/index.ts. Run the example using npm test or yarn test.

Simply configure a new instance of the storage engine and pass it to Multer:

...
import { MulterGoogleCloudStorage } from '@duplexsi/multer-storage-google-cloud';

const storage = new MulterGoogleCloudStorage({
	bucketName: "test-bucket",
	keyFilename: join(__dirname, '..', 'google-storage.json'),
	destination: (req, f, cb) => cb(null, `profile-pictures/${f.originalname}`)
});

const app = express();
app.post('/', multer({ storage }).single('file'), (req, res) => {
	// ...
	res.send(/* ... */);
});
...

The library also exposes the selected bucket for direct access (refer to the Google Cloud Storage NodeJS Client documentation):

router.get('/uploads/*', async (req, res) => {
	const [,, ...file] = req.path.split('/');

	const bucketFile = storage.selectedBucket.file(file.join('/'));
	if(!(await bucketFile.exists())[0]) return res.status(404).send("Not Found");

	const fileReadStream = bucketFile.createReadStream();
	fileReadStream.pipe(res);
});

Constructor Options

NameDescription
bucketNameRequired. The name of the bucket to upload into.
destinationOptional. Full path to the destination directory in the bucket or a factory function which is called for every uploaded file with the Express req, Multer file, and a callback. It must return the full destination path, including the filename!
bucketOptionsOptional. BucketOptions passed to storage.bucket(name, options)
writeStreamOptionsOptional. CreateWriteStreamOptions passed to bucketFile.createWriteStream(options)
fileOptionsOptional. FileOptions passed to bucket.file(name, options)