uploadio

Simple middleware for uploading files.

Usage no npm install needed!

<script type="module">
  import uploadio from 'https://cdn.skypack.dev/uploadio';
</script>

README

UploadIO

Simple middleware for uploading files.

Install

# With NPM 
npm install uploadio

# With Yarn 
yarn add uploadio

Usage

When you upload a file, the file will be accessible from req.files.

Example:

You're uploading a file called xxx.jpg

Your input's name field is profileImage:

In your server request, you can access your uploaded file from req.files.profileImage:

router.post('/', function(req, res) {
  res.send({files: req.files.profileImage});
});

Using middleware

app.use(fileUpload({
  debug: true,
  thumbnails: [{
    width: 250,
    height: 250,
    fit: [cover, contain, fill, inside or outside] // option, default cover
  }, {
    width: 50,
    height: 50,
  }],
  persistFileName: true,
  uploadDir: 'uploads/profiles', //Don't add forward slash at the end of path
  saveToS3: {
    secretAccessKey: 'YOUR-AWS-SECRET-KEY',
    accessKeyId: ''YOUR-AWS-ACCESS-KEY',
    bucket: 'BUCKET-NAME'
  }
}));

// How to get the the uploaded files for further use?
// req.cloudFiles ✓
app.post('/upload', function(req, res, next) {
    console.info(req.cloudFiles);
})

Sample output

Uploaded to local disk

{
    "files": [
        {
            "location": "uploads/profiles/download.jpeg",
            "key": "download.jpeg",
            "thumbnailImageUrls": [
                {
                    "250x250": "uploads/profiles/download_250x250.jpeg"
                },
                {
                    "50x50": "uploads/profiles/download_50x50.jpeg"
                }
            ]
        },
        {
            "location": "uploads/profiles/men.png",
            "key": "men.png",
            "thumbnailImageUrls": [
                {
                    "250x250": "uploads/profiles/men_250x250.png"
                },
                {
                    "50x50": "uploads/profiles/men_50x50.png"
                }
            ]
        }
    ]
}

When uploaded to s3

{
    "files": [
        {
            "location": "https://xxx.s3.amazonaws.com/uploads/profiles/download.jpeg",
            "key": "uploads/profiles/download.jpeg",
            "thumbnailImageUrls": [
                {
                    "250x250": "https://xxx.s3.amazonaws.com/uploads/profiles/download_250x250.jpeg"
                },
                {
                    "50x50": "https://xxx.s3.amazonaws.com/uploads/profiles/download_50x50.jpeg"
                }
            ]
        },
        {
            "location": "https://xxx.s3.amazonaws.com/uploads/profiles/men.png",
            "key": "uploads/profiles/men.png",
            "thumbnailImageUrls": [
                {
                    "250x250": "https://xxx.s3.amazonaws.com/uploads/profiles/men_250x250.png"
                },
                {
                    "50x50": "https://xxx.s3.amazonaws.com/uploads/profiles/men_50x50.png"
                }
            ]
        }
    ]
}

APIs

Name Default Usage
debug false or true debug option to true to see some logging about upload process
thumbnails empty or [] Should be an array of desired height and width
persistFileName false or true Random file name ex: 123456789.jpeg, if true actual file name separated by underscore for spaces
uploadDir optional If provided created directories otherwise uploaded at the root in a director uploads
saveToS3 optional If passed the resources will be uploaded to s3. You need to provide secretAccessKey, accessKeyId and bucket name
keepExtension optional If passed then file extension will be passed value
thumbnails: [{width, height, fit}] how the image should be resized to fit both provided dimensions, one of cover, contain, fill, inside or outside. (optional, default 'cover')
thumbnail option REF. https://sharp.pixelplumbing.com/api-resize

Thanks & Credit

Busboy Package AWS SDK Package Image thumbnail