使用multer和nodejs返回上传文件的文件名

时间:2017-05-27 18:21:03

标签: javascript node.js ionic-framework ionic2 multer

我正在创建一个简单的应用程序作为离子2的学习体验,它连接到运行multer的节点服务器上传图像。我遇到的问题是,我需要将最终文件名从multer返回到上传它的应用程序,以便在本地保存。我使用@ ionic / cloud-angular的Auth和User模块进行身份验证和用户信息。 User对象有一个详细信息对象,其中包括" name"," email"," username"," image",... 因此,当图像上传到节点服务器并且multer保存它时,我需要将该文件名返回给应用程序,以便我可以更新user.details.image属性。

这是我的节点服务器的简单版本......

var express = require('express');
var http = require('http');
var bodyParser = require('body-parser');
var multer = require('multer');
var cors = require('cors');
var postStorage = multer.diskStorage({
    destination: function(req, file, callback) {
        callback(null, './uploads');
    },
    filename: function(req, file, callback) {
        let fileName = '', postName;
        if(typeof req.body.postName !== "undefined") {
            postName = req.body.postName.toLowerCase().replace(/ /g, '-');
            filename += postName;
        }
        fileName += new Date().getTime();
        fileName += ".png";
        callback(null, fileName);
    }
});
var app = express();
app.set('port', process.env.PORT || 3000);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(cors());
app.post('/upload', function(req, res) {
    var uploadPost = multer({storage: postStorage}).single('post_image');
    uploadPost(req, res, function(err) {
        if(err) {
            return res.end("error uploading file");
        }
        res.end("file uploaded");
    });
});
app.listen(app.get('port');
console.log("app listening on port: " _ app.get('port'));

有没有办法让它发回multer保存的最终文件名?像res.json({fileName:fileName});重发(); 我现在还不知道,我可以在multer上找到的所有教程都展示了如何创建一个新的文件名并将文件保存在磁盘或数据库或内存中,但它没有显示如何实际获得该文件名返回上传它的应用程序。 提前感谢您的帮助,我真的很感激。如果您需要查看上传内容的离子2代码,请告诉我,我也会使用该代码更新帖子。谢谢。

1 个答案:

答案 0 :(得分:3)

如果您要上传单个文件,则可以使用req.file.filename

获取文件名

如果您上传多个文件req.files

获得文件名后,您可以使用res.send({filename:FileName});

将其发送给客户