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

Neg*_*ity 4 javascript node.js ionic-framework multer ionic2

我正在创建一个简单的应用程序,作为使用 ionic 2 的学习体验,该应用程序连接到运行 multer 的节点服务器以上传图像。我遇到的问题是,我需要将最终文件名从 multer 返回到上传它的应用程序,以将其保存在本地。我正在使用来自@ionic/cloud-angular 的 Auth 和 User 模块进行身份验证和用户信息。User 对象有一个 details 对象,其中包含“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'));
Run Code Online (Sandbox Code Playgroud)

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

Din*_*ned 7

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

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

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