@jb_fmanager/s3
v1.0.0
Published
s3 service package for @jb_fmanager
Downloads
1
Maintainers
Readme
npm i @jb_fmanager/s3
yarn add @jb_fmanager/s3
const express = require("express");
const app = express();
const cors = require("cors");
require("dotenv").config(); // to parse your config variables from the .env file as shown below (optional, yet recommended)
const jbfm_s3 = require("@jb_fmanager/s3")({
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_KEY,
bucketName: process.env.AWS_BUCKET_NAME,
endpoint: "your/s3/bucket/endpoint/url",
// any other s3 configuration you want to include, the one above is the required minimum
});
const prefix = "/api/fm"; // prefix your routes with the same namespace used in the frontend component
[get] map
Maps the s3 bucket and returns a parent / child file tree structure
app.get(`${prefix}/map`, (req, res, next) =>
jbfm_s3
.map()
.then((data) => res.status(200).send(data))
.catch(next)
);
[get] create_folder
Creates a new directory object in the specified path
app.get(`${prefix}/create_folder`, ({ query }, res, next) =>
jbfm_s3
.create_folder(query.path, query.name) // pass query parameters: path, name
.then((_) => res.status(200).send({}))
.catch(next)
);
[get] rename
Renames an object and all objects down in hierarchy
app.get(`${prefix}/rename`, ({ query }, res, next) =>
jbfm_s3
.rename(query.oldPath, query.newPath) // pass query parameters: oldPath, newPath
.then((_) => res.status(200).send({}))
.catch(next)
);
[post] remove
Removes a number of objects
app.post(`${prefix}/remove`, ({ body }, res, next) =>
jbfm_s3
.remove(body) // pass the request body
.then((_) => res.status(200).send({}))
.catch(next)
);
[post] copy
Copies a number of objects from one path to another
app.post(`${prefix}/copy`, ({ query, body }, res, next) =>
jbfm_s3
.copy(query.target, body) // pass the requst body and query parameter: target
.then((_) => res.status(200).send({}))
.catch(next)
);
[post] move
Moves a number of objects from one path to another
app.post(`${prefix}/move`, ({ query, body }, res, next) =>
jbfm_s3
.move(query.target, body) // pass query parameter target and request body
.then((_) => res.status(200).send({}))
.catch(next)
);
[post] upload
Saves a number of objects into the given destination
app.post(`${prefix}/upload`, (req, res, next) =>
jbfm_s3
.upload(req, res, {
keepOriginalName: false, // maintains or not the original name of a file
overrideMaxSize: 1024 * 1024 * 5, // overrides the value from the frontend component
})
.then((result) => res.status(200).send(result))
.catch(next)
);
// Next.js - blocking default parser on "api/fm/upload" route example
export const config = {
api: {
bodyParser: false,
},
};
// process upload
// fastify - adding a custom multipart/form-data parser which will pass the request onwards
const fastify = require("fastify")({});
fastify.addContentTypeParser(
"multipart/form-data",
function (request, payload, done) {
done(null, payload);
}
);
// then inside your route
upload(request.raw, response.raw);
// in fastify the instance of IncomingMessage can be found under request.raw,