在node.js中更改上载文件的名称

时间:2013-04-17 08:49:33

标签: node.js file-upload formidable

我正在使用node.js上传文件。但它会将文件上传到/tmp文件夹中,其名称是随机的(例如:132d439bb31ee13daaf6ce02e223738f)。我希望节点在给定目录中上传具有给定名称的文件。我该怎么做?这是我的代码:

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 个答案:

答案 0 :(得分: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;
      });

问题解决了