2011-12-02 22 views
9

कोई भी नोड में फॉर्मिडेबल द्वारा पार्स की गई फ़ाइलों को नाम देने के बारे में कैसे जाता है? वर्तमान में मेरी फाइलें '7c9d182a9892bb7588b49ea9d364efd0.pdf' के रूप में सहेजी जा रही हैं, मैं मूल फ़ाइल नामों को अधिक पसंद करूंगा।फॉर्मिडेबल द्वारा पार्स की गई फ़ाइलों का नाम कैसे बदलें?

कोई भी यह कैसे जानता है?

उत्तर

18

यह (.on की जाँच (फ़ाइल '...) समारोह) कैसे मैंने किया है:

// 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); 
+1

'.on' मुझे त्रुटियां देगा। हालांकि, इसे 'form.on' के साथ काम करने के लिए मिला – Houseman

1

आप दुर्जेय फ़ाइल वस्तु से मूल नाम प्राप्त कर सकते हैं:

form.parse(req, function(err, fields, files) { 
    var filename = files.upload.name; 
}); 

आशा है कि यह मदद करता है

+0

धन्यवाद। तो क्या आप यहाँ से fs.rename होगा? फॉर्म पार्सर को ऐसा करने का कोई तरीका है? –

9

यहाँ मेरे अपने जवाब है:

form.uploadDir = "temp/uploads"; 
form.keepExtensions = true; 

form 
    .on('error', function(err) { 
     throw err; 
    }) 

    .on('field', function(field, value) { 
     //receive form fields here 
    }) 

    /* this is where the renaming happens */ 
    .on ('fileBegin', function(name, file){ 
      //rename the incoming file to the file's name 
      file.path = form.uploadDir + "/" + file.name; 
    }) 

    .on('file', function(field, file) { 
     //On file received 
    }) 

    .on('progress', function(bytesReceived, bytesExpected) { 
     //self.emit('progess', bytesReceived, bytesExpected) 

     var percent = (bytesReceived/bytesExpected * 100) | 0; 
     process.stdout.write('Uploading: %' + percent + '\r'); 
    }) 

    .on('end', function() { 


    }); 

form.parse(req); 

जवाब मॉड्यूल के GitHub पृष्ठ पर था सभी के साथ!

+0

आप process.stdout.write() बजाय console.log() क्यों कर रहे हैं? – qodeninja

संबंधित मुद्दे