GridFS adapter for receiving upstreams. Particularly useful for handling streaming multipart file uploads from the Skipper body parser.
This is a fork from skipper-gridfs. Below are the diferences from base repository:
-
Added support to
maxBytes
option, using similar logic fromskipper-disk
. Behavior:- An error is thrown when upload stream exceeds bytes defined in
maxBytes
parameter. - Limit is applied for all upload stream (all files in the same request, not for each file individually)
- Files uploaded before limit is reached are saved in GridFS. Only the one that exceeds and the subsequent are not saved.
- Garbage of unfinished upload is removed using
GridFSBucketWriteStream.abort()
function
- An error is thrown when upload stream exceeds bytes defined in
-
Added support to
onProgress
using same logic fromskipper-disk
-
Added support to Node >= 14 & MongoDB Node Driver 3.6.5
-
CI using official skipper-adapter-test
-
Bug fix in function
adapter.rm()
that causes callback to be called twice. Detais about it you find here.
All the credits about the original package belongs to @willhuang85 and the staff. Great job guys!
Currently only supports Node 6 and up. Node 15 included!
========================================
$ npm install @dmedina2015/skipper-gridfs --save
Also make sure you have skipper installed as your body parser.
Skipper is installed by default in Sails v1.4.2.
========================================
req.file('avatar')
.upload({
adapter: require('@dmedina2015/skipper-gridfs'),
uri: 'mongodb://username:[email protected]:27017/myDatabase'
}, function whenDone(err, uploadedFiles) {
if (err) return res.negotiate(err);
else return res.ok({
files: uploadedFiles,
textParams: req.params.all()
});
});
For more detailed usage information and a full list of available options, see the Skipper docs, especially the section on "Uploading to GridFS".
Option | Type | Details |
---|---|---|
uri |
((string)) | URI to connect to Mongo instance, e.g. mongodb://username:password@localhost:27107/databasename .(Check mongo client URI syntax). |
bucketOptions |
((object)) | An optional parameter that matches the GridFSBucket options (Check mongo gridfs bucket options). |
mongoOptions |
((object)) | An optional paramter that matches the MongoClient.connect options (Check mongo client options). |
maxBytes |
((integer)) | Optional. Max total number of bytes permitted for a given upload, calculated by summing the size of all files in the upstream; e.g. if you created an upstream that watches the "avatar" field (req.file('avatar') ), and a given request sends 15 file fields with the name "avatar", maxBytes will check the total number of bytes in all of the 15 files. If maxBytes is exceeded, the already-written files will be left untouched, but unfinshed file uploads will be garbage-collected, and not-yet-started uploads will be cancelled. (Note that maxBytes is currently experimental) |
onProgress |
((function)) | Optional. This function will be called again and again as the upstream pumps chunks into the receiver with a dictionary (plain JavaScript object) representing the current status of the upload, until the upload completes. |
E_EXCEEDS_UPLOAD_LIMIT
(whenmaxBytes
is exceeded for upstream)
========================================
are welcomed 👌
To run the tests:
$ URI=mongodb://username:password@localhost:27107/databasename npm test
========================================
MIT