我正在创建一个简单的应用程序,作为Ionic2的学习体验,它连接到运行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});Res.End();在这一点上我真的不知道,我能在multer上找到的所有教程只是展示了如何创建一个新的文件名,并将文件保存在磁盘、数据库或内存中,但没有任何地方展示了如何将该文件名返回到上载它的应用程序中。事先谢谢你的帮助,我真的很感激。如果你需要看到离子2的代码,上传的东西,请让我知道,我将更新的帖子与该代码以及。谢谢.
如果上载的是单个文件,则可以使用req.file.filename
获取文件名
如果上载多个文件req.files
获取文件名后,可以使用res.send({filename:filename});
将其发送到客户端