Node.js: organizzare gli upload in directory

Short link

Tramite Node.js possiamo organizzare i nostri upload in directory.

Con npm dobbiamo installare i seguenti moduli:

  • express per gestire la nostra applicazione
  • multer per gestire l'upload dei file
  • mkdirp per creare ricorsivamente le directory
  • bodyparser per gestire l'input da form e l'output.

Quindi possiamo scrivere il seguente codice:


var express = require('express');
var multer  = require('multer');
var mkdirp = require('mkdirp');
var bodyParser = require('body-parser');
var app = express();

app.use(bodyParser.urlencoded({ extended: true }));

app.post('/api/upload', function(req, res) {
	var now = new Date();
    var year = now.getFullYear();
    var month = now.getMonth() + 1;
    var path = 'uploads/' + year + '/' + month; // es. uploads/2016/1
    
    mkdirp(path, function(err) { // Crea la nuova directory o usa quella già esistente
	    if(!err) {
			var storage = multer.diskStorage({
                destination: function (req, file, cb) {
                     cb(null, path); // La destinazione è il percorso della nuova directory
                },
                filename: function (req, file, cb) {
                     cb(null, file.originalname); // Mantiene il nome del file originale
                }
            });
            var upload = multer({ storage: storage }).single('file');
            // file è il valore dell'attributo name del campo file 
            
            upload(req, res, function(err) { 
	           if(!err) {
		           res.json({uploaded: true});
	           } 
	        });  
	    }
    });
});