next-multipart
Next-multipart is a small utility library to ease the process of file uploads with Next.js.
It uses formidable under the hood, but with much less work to do and a modern API
Installation
Installation is pretty straight forward. Simply run one of the following commands to install
it to your Next.js app.
yarn add next-multipart
npm i next-multipart
pnpm add next-multipart
Usage
TL;DR:
import { withFileUpload, getConfig } from 'next-multipart'
- Simply wrap any api route with
withFileUpload
export const config = getConfig()
- You now can access
req.file
(if the request contained one file field) or req.files
- Call
await req.file.toBuffer()
to load the file into the memory
API
withFileUpload
The withFileUpload
function is a higher-order function which should be wrapped around
an api route from next.js:
import { withFileUpload } from 'next-multipart';
export default withFileUpload(async (req, res) => {
res.json({test: 1})
})
By default it will attach the files and files which were posted to that endpoint to the NextApiRequest
(in this case req
) if the method was POST
, PATCH
or PUT
and the Content-Type
header was set to multipart/form-data
.
If the request includes files they will be saved to the disk in the os.tmpdir()
directory.
After the execution of the handler all files will be cleaned up automatically.
The following properties are added to the Request:
files
: Array of EnhancedFile
file
: Single EnhancedFile. Will be undefined
if there are no files
fields
: Object containing the name of the field as the key and the value of the field as the value
You can also pass a second parameter options
to withFileUpload
. Options is an object with the following values:
allowedMethods?: HTTP_METHOD[];
cleanupFiles?: boolean;
formidableOptions?: formidable.Options
EnhancedFile
Basically just formidable.File but with two added helper functions:
toBuffer: () => Promise<Buffer>
destroy: () => Promise<void>