1.0.0 • Published 1 year ago

@jb_fmanager/s3 v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago
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,