Node.js Bestanden uploaden
De formidabele module
Er is een zeer goede module voor het werken met bestandsuploads, genaamd "Formidable".
De Formidable-module kan worden gedownload en geïnstalleerd met behulp van NPM:
C:\Users\Your Name>npm install formidable
Nadat u de Formidable-module hebt gedownload, kunt u de module in elke toepassing opnemen:
var formidable = require('formidable');
Upload bestanden
Nu bent u klaar om een webpagina in Node.js te maken waarmee de gebruiker bestanden naar uw computer kan uploaden:
Stap 1: Maak een uploadformulier
Maak een Node.js-bestand dat een HTML-formulier schrijft, met een uploadveld:
Voorbeeld
Deze code produceert een HTML-formulier:
var http = require('http');
http.createServer(function
(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<form
action="fileupload" method="post" enctype="multipart/form-data">');
res.write('<input
type="file" name="filetoupload"><br>');
res.write('<input
type="submit">');
res.write('</form>');
return res.end();
}).listen(8080);
Stap 2: Parseer het geüploade bestand
Voeg de Formidable-module toe om het geüploade bestand te kunnen ontleden zodra het de server bereikt.
Wanneer het bestand is geüpload en geparseerd, wordt het in een tijdelijke map op uw computer geplaatst.
Voorbeeld
Het bestand wordt geüpload en in een tijdelijke map geplaatst:
var http = require('http');
var formidable = require('formidable');
http.createServer(function
(req, res) {
if (req.url == '/fileupload') {
var form = new formidable.IncomingForm();
form.parse(req,
function (err, fields, files) {
res.write('File
uploaded');
res.end();
});
} else {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<form
action="fileupload" method="post" enctype="multipart/form-data">');
res.write('<input
type="file" name="filetoupload"><br>');
res.write('<input
type="submit">');
res.write('</form>');
return res.end();
}
}).listen(8080);
Stap 3: Sla het bestand op
Wanneer een bestand met succes naar de server is geüpload, wordt het in een tijdelijke map geplaatst.
Het pad naar deze map is te vinden in het object "files", dat als derde argument wordt doorgegeven in de parse()
callback-functie van de methode.
Om het bestand naar de map van uw keuze te verplaatsen, gebruikt u de module Bestandssysteem en wijzigt u de naam van het bestand:
Voorbeeld
Voeg de fs-module toe en verplaats het bestand naar de huidige map:
var http = require('http');
var formidable = require('formidable');
var fs = require('fs');
http.createServer(function
(req, res) {
if (req.url == '/fileupload') {
var form = new formidable.IncomingForm();
form.parse(req,
function (err, fields, files) {
var
oldpath = files.filetoupload.filepath;
var
newpath = 'C:/Users/Your Name/' + files.filetoupload.originalFilename;
fs.rename(oldpath, newpath, function (err) {
if (err) throw
err;
res.write('File uploaded
and moved!');
res.end();
});
});
} else {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<form
action="fileupload" method="post" enctype="multipart/form-data">');
res.write('<input
type="file" name="filetoupload"><br>');
res.write('<input
type="submit">');
res.write('</form>');
return res.end();
}
}).listen(8080);