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);