如何在使用Node.js中的Express和Formidable时更改上传路径

9

实际上我遇到了两个问题

首先,如何更改上传路径

我的文件夹结构如下:

|__app.js
|__upload

我的Node.js代码在app.js文件中,因此我想将上传的图片上传到上传文件夹,于是我更改了路径:

var form = new formidable.IncomingForm;
form.uploadDir = "./upload";

看起来上传成功了,但是我不知道文件去了哪里,它没有在上传文件夹中。

那么正确的路径名是什么?

第二个问题是

如果我不改变它,它可以成功上传到C:/Users/ADMINI~1/AppData/Local/Temp 但是会被重命名而没有格式,

那么我该如何获取上传格式并自己重新命名呢?

第三个问题是

我还将处理程序绑定到process事件上, 像这样:

form.on('progress', function(bytesReceived, bytesExpected) {
    console.log(bytesReceived + ' ' + bytesExpected);
});

但似乎不起作用,上传日志时什么也没有。为什么?我漏掉了什么吗?

以下是我的全部代码:

app.post('/upload', function (req, res) {
    var form = new formidable.IncomingForm;
    // form.uploadDir = "./upload";
    console.log(form.uploadDir);

    form.parse(req, function(err, fields, files){
      if (err) return res.end('You found error');
      console.log(files.image);
    });

    form.on('progress', function(bytesReceived, bytesExpected) {
        console.log(bytesReceived + ' ' + bytesExpected);
    });

    form.on('error', function(err) {
        res.writeHead(200, {'content-type': 'text/plain'});
        res.end('error:\n\n'+util.inspect(err));
    });

    // res.end('Done');
    res.send("well done");

    return;
})
1个回答

11

首先,您需要告诉您的应用程序,您不希望bodyParser处理文件上传。

app.use(express.bodyParser());

是等价于

app.use(express.json());
app.use(express.urlencoded());
app.use(express.multipart());

删除最后一行以处理文件上传。在初始化表单时添加一些自定义选项

var form = new formidable.IncomingForm({ 
  uploadDir: __dirname + '/tmp',  // don't forget the __dirname here
  keepExtensions: true
});

现在您的代码应该可以正常工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接