首页 文章

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

提问于
浏览
2

我正在创建一个简单的应用程序作为离子2的学习体验,它连接到运行multer的节点服务器上传图像 . 我遇到的问题是,我需要将最终文件名从multer返回到上传它的应用程序,以便在本地保存 . 我使用@ ionic / cloud-angular的Auth和User模块进行身份验证和用户信息 . User对象有一个详细信息对象,其中包含“name”,“email”,“username”,“image”等信息......所以,当图像上传到节点服务器并且multer保存它时,我需要得到它filename返回应用程序,以便我可以更新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 回答

  • 3

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

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

    获得文件名后,可以使用 res.send({filename:FileName}); 将其发送给客户端

相关问题