Skip to content
Feathers service for blob storage, like S3.
Branch: master
Clone or download
Latest commit d680764 Mar 9, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Create stale.yml Apr 24, 2018
examples Update semistandard to the latest version 🚀 (#56) Mar 9, 2019
lib feat: use params for get operation (#63) Mar 9, 2019
test Update semistandard to the latest version 🚀 (#56) Mar 9, 2019
.editorconfig in the beginning Feb 22, 2016
.gitignore Upgrade to Feathers v3 and latest plugin infrastructure (#43) Mar 9, 2018
.istanbul.yml Upgrade to Feathers v3 and latest plugin infrastructure (#43) Mar 9, 2018
.npmignore Upgrade to Feathers v3 and latest plugin infrastructure (#43) Mar 9, 2018
.travis.yml Update dependencies and documentation to be up to date (#45) Jun 3, 2018
CHANGELOG.md Updating changelog Mar 9, 2019
LICENSE in the beginning Feb 22, 2016
README.md Update dependencies and documentation to be up to date (#45) Jun 3, 2018
mocha.opts
package-lock.json 2.1.0 Mar 9, 2019
package.json 2.1.0 Mar 9, 2019

README.md

feathers-blob

Greenkeeper badge Build Status Dependency Status Download Status Slack Status

Feathers abstract blob store service

Installation

npm install feathers-blob --save

Also install a abstract-blob-store compatible module.

API

const BlobService = require('feathers-blob')

blobService = BlobService(options)

blobService.create(body, params)

where input body is an object with either:

  • a key uri pointing to data URI of the blob,
  • a key buffer pointing to raw data buffer of the blob along with its contentType (i.e. MIME type).

Optionally, you can specify in the body the blob id which can be the file path where you want to store the file, otherwise it would default to ${hash(content)}.${extension(contentType)}.

Tip: You can use feathers hooks to customize the id. You might not want the client-side to write whereever they want.

returns output 'data' of the form:

{
  [this.id]: `${hash(content)}.${extension(contentType)}`,
  uri: body.uri,
  size: length(content)
}

blobService.get(id, params)

returns output data of the same form as create.

blobService.remove(id, params)

Example

const { getBase64DataURI } = require('dauria');
const AWS = require('aws-sdk');
const S3BlobStore = require('s3-blob-store');
const feathers = require('@feathersjs/feathers');
const BlobService = require('feathers-blob');

const s3 = new AWS.S3({
  endpoint: 'https://{service}.{region}.{provider}.com',
  accessKeyId: process.env.AWS_ACCESS_KEY_ID,
  secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
});

const blobStore = S3BlobStore({
  client: s3,
  bucket: 'feathers-blob'
});

const blob = {
  uri: getBase64DataURI(new Buffer('hello world'), 'text/plain')
}

const app = feathers();

app.use('/upload', BlobService({
  Model: blobStore
}));

const blobService = app.service('upload');

blobService.create(blob).then(function (result) {
  console.log('Stored blob with id', result.id);
}).catch(err => {
  console.error(err);
});

Should you need to change your bucket's options, such as permissions, pass a params.s3 object using a before hook.

app.service('upload').before({
  create(hook) {
    hook.params.s3 = { ACL: 'public-read' }; // makes uploaded files public
  }
});

For a more complete example, see examples/app which can be run with npm run example.

License

Copyright (c) 2018

Licensed under the MIT license.

You can’t perform that action at this time.