feathers-blob
Feathers
abstract blob storeservice
Installation
npm install feathers-blob --saveAlso install a abstract-blob-store compatible module.
API
const BlobService = require('feathers-blob')
blobService = BlobService(options)
options.Modelis an instantiated interface that implements theabstract-blob-storeAPIoptions.idis a string 'key' for the blob identifier.returnUridefaults totrueand indicates if the service output a data URI on create/get operationsreturnBufferset it totrueif you only want a buffer output instead of a data URI on create/get operations
Tip: returnUri/returnBuffer are mutually exclusive. If you need both extract the buffer from the data URI on the client-side to avoid transferring the data twice over the wire.
blobService.create(body, params)
where input body is an object with either:
- a key
uripointing to data URI of the blob, - a key
bufferpointing to raw data buffer of the blob along with itscontentType(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, // When returnUri options is set
buffer: body.buffer, // When returnBuffer options is set
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.

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.

