| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | import { Meteor } from 'meteor/meteor';import fs from 'fs';export const createOnAfterUpload = bucket =>  function onAfterUpload(file) {    const self = this;    // here you could manipulate your file    // and create a new version, for example a scaled 'thumbnail'    // ...    // then we read all versions we have got so far    Object.keys(file.versions).forEach(versionName => {      const metadata = { ...file.meta, versionName, fileId: file._id };      fs.createReadStream(file.versions[versionName].path)        // this is where we upload the binary to the bucket using bucket.openUploadStream        // see http://mongodb.github.io/node-mongodb-native/3.2/api/GridFSBucket.html#openUploadStream        .pipe(          bucket.openUploadStream(file.name, {            contentType: file.type || 'binary/octet-stream',            metadata,          }),        )        // and we unlink the file from the fs on any error        // that occurred during the upload to prevent zombie files        .on('error', err => {          // console.error("[createOnAfterUpload error]", err);          self.unlink(this.collection.findOne(file._id), versionName); // Unlink files from FS        })        // once we are finished, we attach the gridFS Object id on the        // FilesCollection document's meta section and finally unlink the        // upload file from the filesystem        .on(          'finish',          Meteor.bindEnvironment(ver => {            const property = `versions.${versionName}.meta.gridFsFileId`;            self.collection.update(file._id, {              $set: {                [property]: ver._id.toHexString(),              },            });            self.unlink(this.collection.findOne(file._id), versionName); // Unlink files from FS          }),        );    });  };
 |