nodejs强大的改变uploadDir

and*_*a86 3 node.js express formidable

我有一个proyect,即时通讯试图完成我想上传图像我可以上传图像但不在上传用于上传的目录

好吧让代码:

 app.post('/register',function(req,res) 
    {
var form = new formidable.IncomingForm();
form.keepExtensions = true;
form.uploadDir ='./uploaded/';
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);
Run Code Online (Sandbox Code Playgroud)

问题是,当我发布图像...图像仍然保存在process.env.TMP我的proyect有这个目录arq

proyect:
    node_modules
    uploaded
    public
    routes
    views
    app.js
    package.json
Run Code Online (Sandbox Code Playgroud)

编辑2:问题是BODYPARSER

确定从最后一个代码...问题是app.js当我配置应用程序有一个bodyParser,以便bodyParser方法使用来自快递的强大的

最后一个代码是正确的和功能上的,如果有人想使用代码...只需注释来自express.configure的行

app.use(express.bodyParser());
Run Code Online (Sandbox Code Playgroud)

关闭快递体操运动员,但表达使用强大,所以同样的事情......

还有另一个问题

我像这样配置express.bodyParser

  app.use(express.bodyParser(
    {
      uploadDir: './uploads',
      keepExtensions: true
    }));
Run Code Online (Sandbox Code Playgroud)

我改变了这样的第一个代码

app.post('/register',function(req,res) 
{
  var oldDir=req.files.img.path;
  var newDir='./uploads/'+req.body.email+'/perfil/';

if(req.files)
{
  mkdirp(newDir,0777,function(err){
    if(err) throw err;
  })
}
if(req.files)
{
  fs.rename(oldDir,newDir+req.files.img.name,function(err){
    if(err) throw err;
  });

}
res.send('pow!');
Run Code Online (Sandbox Code Playgroud)

它是功能性的,当此代码接收文件时,将文件放在uploads文件夹中,然后将create文件夹与电子邮件名称一起移动,最后将文件重命名为带有扩展名的源文件

这是完美的"!

没有完美......我想用这种方法

.on ('fileBegin', function(name, file){
            //rename the incoming file to the file's name
            file.path = form.uploadDir + "/" + file.name;
    })
    .on('progress', function(bytesReceived, bytesExpected) {
        //self.emit('progess', bytesReceived, bytesExpected)

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

因为从第一个代码我可以配置从第二个代码开始放置文件的位置我在服务器接收文件后移动文件

我觉得这个方法是明确的,因为快速使用像中间件一样强大

我怎样才能配置方法?

方法在哪里......?'?

我如何从第二个代码知道req.files中包含的方法?(因为使用bodyParser()的req.files与在第一个代码中使用formidable的form.file相同)

tnx全部

Bad*_*yon 8

IncomingForm构造函数接受一个options对象.您可能还需要在路径中使用__dirname全局.

var form = new formidable.IncomingForm({ uploadDir: __dirname + '/uploaded' });

您可以在强大的源中看到该选项的应用方式.