【问题标题】:return filename of uploaded file with multer and nodejs使用 multer 和 nodejs 返回上传文件的文件名
【发布时间】:2017-10-28 10:48:59
【问题描述】:

我正在创建一个简单的应用程序作为 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'));

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

【问题讨论】:

  • 这是您编写 IRL 的方式吗?行与行之间没有换行符?哎哟...
  • 不,我试图压缩代码并简化发布。如果我发布 200 行代码,我敢肯定人们会有点恼火,这可以在 50 行内完成。我认为这对帖子来说会更好

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


【解决方案1】:

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

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

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

【讨论】:

  • 那部分没有问题,我已经能够上传文件没有问题,但我不知道如何将新文件名返回给上传应用程序。因为我正在使用 multer 创建一个新文件名,所以我需要告诉上传文件的应用程序,新文件名是什么。
  • 例如,假设我使用 ajax... $.ajax({ url: "localhost:3000/upload", data: {post_image: [FILENAME]}, success: function(msg ) { //这里需要新的文件名 } });
  • res.send({filename:name_of_your_file});这是你想要的吗?
  • 看起来效果很好,谢谢@Dinesh 这里的最后一个问题,为什么 req.body 是 {} 并且在我发送文件时没有任何内容,并且 postName=test跨度>
  • 因为您没有发送任何表单字段。如果您发送表单字段,它将在 req.body 中。如果您发送文件,它将在 req.file 中。我更新了我的答案,如果有帮助,请接受。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 2017-09-20
  • 2021-11-28
  • 2017-03-29
  • 1970-01-01
  • 2021-08-16
相关资源
最近更新 更多