/meteor-slingshot-cloudinary

Cloudinary adapter for meteor slingshot uploader.

Primary LanguageJavaScriptMIT LicenseMIT

meteor add jimmiebtlr:slingshot-cloudinary

Use

Cloudinary Console

You'll need to create a upload preset in cloudinary. I belive the following options are needed.

  • Mode: Signed
  • UseFilename: true
  • UniqueFilename: No

Your app

server.js

Slingshot.fileRestrictions('videos', {
  allowedFileTypes: ['video/mp4'],
  maxSize: 500000000,
});

Slingshot.createDirective('videos', Slingshot.Cloudinary, {
  authorize() {
    if (!this.userId) {
      const message = 'Please login before posting files';
      throw new Meteor.Error('Login Required', message);
    }

    return true;
  },

  key() {
    return Meteor.uuid();
  },
});

settings.js

{
  "CloudinaryCloudName": "cloud_name",
  "CloudinarySecret": "secret",
  "CloudinaryKey": "key",
  "CloudinaryPreset": "preset"
}

File Upload Options

Cloudinary allows a number of file upload options, as documented in their nodejs API. A few of these options are supported for now.

tags (optional)

A tag name or an array with a list of tag names to assign to the uploaded image.

Slingshot.createDirective('videos', Slingshot.Cloudinary, {
    authorize() {...},
    key() {...},
    tags: ['tag1', 'tag2']
});

folder (optional)

An optional folder name where the uploaded resource will be stored. The public ID contains the full path of the uploaded resource, including the folder name.

Slingshot.createDirective('videos', Slingshot.Cloudinary, {
    authorize() {...},
    key() {...},
    folder: myFolder
});

Todo

There is still work to be done. Pull requests welcome.

  • Improve handling of video, image, and raw upload types.
  • Check that public_id is checked using the signature.
  • Implement all the file upload options supported by cloudinary