Skip to content

Instantly share code, notes, and snippets.

@imaginamundo
Created May 24, 2021 20:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save imaginamundo/b2150822f9758e32db714a0dea428434 to your computer and use it in GitHub Desktop.
Save imaginamundo/b2150822f9758e32db714a0dea428434 to your computer and use it in GitHub Desktop.
Next.js get CSV and parse
import fs from 'fs';
import { IncomingForm } from 'formidable';
import csvParser from 'csv-parser';
export default async (req, res) => {
const data = await new Promise((resolve, reject) => {
const form = new IncomingForm()
form.parse(req, (err, fields, files) => {
if (err) return reject(err);
resolve({ fields, files });
});
});
const csvArray = [];
await new Promise((resolve) => {
fs.createReadStream(data.files.csv.path, {
encoding: 'utf-8'
})
.pipe(csvParser(','))
.on('data', (csvrow) => {
csvArray.push(csvrow);
})
.on('end',function() {
resolve();
});
});
const document = {
...data.fields,
csv: csvArray
}
console.log(document);
res.status(200).json(document);
}
export const config = {
api: { bodyParser: false }
};
export default function Upload() {
function submit(e) {
e.preventDefault();
const data = new FormData(e.target);
fetch('/api/upload', {
method: 'POST',
body: data
})
.then(res => console.log(res))
.catch(err => console.log(err));
}
return (
<form onSubmit={ submit }>
<input type="name" name="name" value="Dio" required />
<input type="file" name="csv" required />
<button type="submit">Enviar</button>
</form>
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment