我将图像上传到服务器nodejs时找不到文件(使用multer)

时间:2015-03-26 08:11:54

标签: javascript node.js multer

当我通过multer上传图像时,我的服务器nodejs有些问题。 https://github.com/expressjs/multer 当我去文件夹上传时,我没有看到我的文件上传!

我的代码:

app.use(multer(
    {
        dest: path.join(__dirname, 'uploads'),
        inMemory: true,
        includeEmptyFields: true,
        onFileUploadStart: function (file, req, res) {
            console.log('onFileUploadStart');
            console.log(file);
        },
        onFileUploadData: function (file, data, req, res) {
            console.log('onFileUploadData');
            console.log(file);
        },
        onFileUploadComplete: function (file, req, res) {
            console.log('onFileUploadComplete');
            console.log(file);
        },
        limits: {
            fieldNameSize: 999999999,
            fieldSize: 999999999
        },
        onParseStart: function() {
            console.log('Starting to parse request!');
        },
        onParseEnd: function(req, next) {
            console.log('Done parsing!');
            next();
        },
        onError: function(e, next) {
            if (e) {
                console.log(e.stack);
            }
            next();
        }
    }));

路线:(我收到了客户的文件)

router.post('/newapi/addimages',function(req,res){
    try{
         // fileName = file.name, file name passed by client. Not used here. We use the name auto-generated by Node
        var file = req.files.file;
        var filePath = file.path;
        var lastIndex = filePath.lastIndexOf("/");
        var tmpFileName = filePath.substr(lastIndex + 1);
        var image = req.body;
        image.fileName = tmpFileName;
        return res.send({ok:'heyyou'});
    }
    catch(err){
        console.log(err);
        return res.send({ok:'heyyou'});
    }
});

我的结果:

enter image description here

1 个答案:

答案 0 :(得分:3)

这是因为您将inMemory选项设置为true。此选项使图像保留在进程内存中,而不是将其传送到文件系统,并可通过req.files.file.buffer访问。

inMemory更改为false,您就可以了。

您没有 来设置每个选项,对于您的应用程序,您可以使用大多数默认值。

app.use(multer({ dest: path.join(__dirname, 'uploads') }));