node.jsformidable

How to rename files parsed by Formidable?


How does one go about naming files parsed by Formidable in Node? Currently my files are saving as '7c9d182a9892bb7588b49ea9d364efd0.pdf', I would much prefer the original file names.

Anyone know how to do this?


Solution

  • This is how I did it (check out the .on(file'...) function):

    // import required modules
        var express = require('express');
        var formidable = require("formidable"); // used for parsing form data
        var fs = require('fs');
    
    // prevent bodyParser from handling multipart forms (ie only handle get and post requests)
        delete express.bodyParser.parse['multipart/form-data'];
    
    // create server
        var app = express.createServer();
    
    // connect middleware
        app.configure(function() {
            // creates body object on request object
                app.use(express.bodyParser());
                app.use(express.methodOverride());
            // used to display static files such as css
                app.use(express.static(__dirname + '/static'));
        });
    
    // enable and define views
        app.set('views', __dirname + '/views');
        app.set('view engine', 'jade'); 
    
    //******************************
    //* create routes
    //******************************
    
    // file upload handling
        app.get('/photos/new', function(request, response) {
            response.render('photos/new');
        });
        app.post('/photos', function(request, response) {
            console.log('in /photos handler');
            var form = new formidable.IncomingForm();
    
            form.uploadDir = __dirname + '/static/upload/photos/';
    
            form.on('file', function(field, file) {
                //rename the incoming file to the file's name
                    fs.rename(file.path, form.uploadDir + "/" + file.name);
            });
    
            form.on('error', function(err) {
                console.log("an error has occured with form upload");
                console.log(err);
                request.resume();
            });
    
            form.on('aborted', function(err) {
                console.log("user aborted upload");
            });
    
            form.on('end', function() {
                console.log('-> upload done');
            });
    
            form.parse(request, function() {
                    response.render('photos/new');
            });
        });
    
    // start our server
        app.listen(8888);