How to upload files in a Next.js form

I had a form in a Next.js page:

<form method="post" action="/api/new" enctype="multipart/form-data">...</form>

which called an API endpoint.

Inside this form I had a file input control:

<input name="logo" type="file" />

Now in the API route, I wasn’t able to get this file.

I searched a bit and turns out Next.js by default does not allow it. I tried various solutions because some didn’t play well with uploading files AND having sending multiple checkboxes for the same attribute. With some solutions I got the file, but the rest of the form didn’t work as expected.

I had to install 3 packages:

npm install next-connect multiparty

I created a middleware folder in the Next.js project root, and inside it this file:

middleware/middleware.js

import nextConnect from 'next-connect'
import multiparty from 'multiparty'

const middleware = nextConnect()

middleware.use(async (req, res, next) => {
  const form = new multiparty.Form()

  await form.parse(req, function (err, fields, files) {
    req.body = fields
    req.files = files
    next()
  })
})

export default middleware

And I changed the API route from the usual:

export default async function handler(req, res) {
  //...
}

to:

import middleware from 'middleware/middleware'
import nextConnect from 'next-connect'

const handler = nextConnect()
handler.use(middleware)

handler.post(async (req, res) => {
  console.log(req.body)
  console.log(req.files)

  //...
})

export const config = {
  api: {
    bodyParser: false
  }
}

export default handler

I restarted Next.js and I was able to get my files data in the API route.


This content originally appeared on flaviocopes.com and was authored by flaviocopes.com

I had a form in a Next.js page:

<form method="post" action="/api/new" enctype="multipart/form-data">...</form>

which called an API endpoint.

Inside this form I had a file input control:

<input name="logo" type="file" />

Now in the API route, I wasn’t able to get this file.

I searched a bit and turns out Next.js by default does not allow it. I tried various solutions because some didn’t play well with uploading files AND having sending multiple checkboxes for the same attribute. With some solutions I got the file, but the rest of the form didn’t work as expected.

I had to install 3 packages:

npm install next-connect multiparty

I created a middleware folder in the Next.js project root, and inside it this file:

middleware/middleware.js

import nextConnect from 'next-connect'
import multiparty from 'multiparty'

const middleware = nextConnect()

middleware.use(async (req, res, next) => {
  const form = new multiparty.Form()

  await form.parse(req, function (err, fields, files) {
    req.body = fields
    req.files = files
    next()
  })
})

export default middleware

And I changed the API route from the usual:

export default async function handler(req, res) {
  //...
}

to:

import middleware from 'middleware/middleware'
import nextConnect from 'next-connect'

const handler = nextConnect()
handler.use(middleware)

handler.post(async (req, res) => {
  console.log(req.body)
  console.log(req.files)

  //...
})

export const config = {
  api: {
    bodyParser: false
  }
}

export default handler

I restarted Next.js and I was able to get my files data in the API route.


This content originally appeared on flaviocopes.com and was authored by flaviocopes.com


Print Share Comment Cite Upload Translate Updates
APA

flaviocopes.com | Sciencx (2021-06-26T05:00:00+00:00) How to upload files in a Next.js form. Retrieved from https://www.scien.cx/2021/06/26/how-to-upload-files-in-a-next-js-form/

MLA
" » How to upload files in a Next.js form." flaviocopes.com | Sciencx - Saturday June 26, 2021, https://www.scien.cx/2021/06/26/how-to-upload-files-in-a-next-js-form/
HARVARD
flaviocopes.com | Sciencx Saturday June 26, 2021 » How to upload files in a Next.js form., viewed ,<https://www.scien.cx/2021/06/26/how-to-upload-files-in-a-next-js-form/>
VANCOUVER
flaviocopes.com | Sciencx - » How to upload files in a Next.js form. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2021/06/26/how-to-upload-files-in-a-next-js-form/
CHICAGO
" » How to upload files in a Next.js form." flaviocopes.com | Sciencx - Accessed . https://www.scien.cx/2021/06/26/how-to-upload-files-in-a-next-js-form/
IEEE
" » How to upload files in a Next.js form." flaviocopes.com | Sciencx [Online]. Available: https://www.scien.cx/2021/06/26/how-to-upload-files-in-a-next-js-form/. [Accessed: ]
rf:citation
» How to upload files in a Next.js form | flaviocopes.com | Sciencx | https://www.scien.cx/2021/06/26/how-to-upload-files-in-a-next-js-form/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.