0

我正在使用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
}
4

1 回答 1

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

问题就解决了

于 2013-04-17T09:18:12.077 回答