2013-04-17 2 views
0

Я использую node.js, чтобы загрузить файл. Но он загружает файл в папку /tmp со случайным именем (например: 132d439bb31ee13daaf6ce02e223738f). Я хочу, чтобы узел загружал файл в заданный каталог с заданным именем. Как я могу это сделать? Вот мой код:Изменение имени загружаемого файла в node.js

var http = require("http"), 
    url = require("url"), 
    sys = require("sys"), 
    events = require("events"), 
    fs = require("fs"), 
    formidable = require('formidable'), 
    util = require('util'); 

var server = http.createServer(function(req, res) { 
    switch (url.parse(req.url).pathname) { 
     case '/': 
      display_form(req, res); 
      break; 
     case '/upload': 
      upload_file(req,res); 
      break; 
     default: 
      show_404(req, res); 
      break; 
    } 
}); 

server.listen(8124); 

function display_form(req, res) { 
    //displays an html form with an upload and a submit button 
} 

function upload_file(req, res) { 
    if (req.url == '/upload' && req.method.toLowerCase() == 'post') { 

     // Instantiate a new formidable form for processing. 

     var form = new formidable.IncomingForm(); 

     // form.parse analyzes the incoming stream data, picking apart the different fields and files for you. 

     form.parse(req, function(err, fields, files) { 
     if (err) { 

      // Check for and handle any errors here. 

      console.error(err.message); 
      return; 
     } 
      form.on('fileBegin', function(name, files) { 
       files.name="./guake.up"; 
      }); 
     res.writeHead(200, {'content-type': 'text/plain'}); 
     res.write('received upload:\n\n'); 

      console.log(files.name); 

     // This last line responds to the form submission with a list of the parsed data and files. 

     res.end(util.inspect({fields: fields, files: files})); 
     }); 
     return; 
    } 
} 

function show_404(req, res) { 
    //shows a 404 page 
} 

ответ

1

Я нашел ответ, и мне нужно только добавить следующий код перед моим form.parse методом:

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

     /* 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; 
     }); 

и проблема решена

Смежные вопросы