javascript - returnera filnamn på uppladdad fil med multer och nodejs
Jag skapar en enkel applikation som en lärande erfarenhet med Ionic 2 som kopplar upp sig mot en Node-server som kör multer för att ladda upp bilder. Problemet jag stöter på är att jag behöver få det slutliga filnamnet från multer tillbaka till appen som laddade upp det, för att spara det lokalt. Jag använder Auth- och User-modulerna från @ionic/cloud-angular för autentisering och användarinformation. User-objektet har ett details-objekt med saker som "name", "email", "username", "image", ... Så när en bild laddas upp till Node-servern och multer sparar den, behöver jag få tillbaka det filnamnet till applikationen så att jag kan uppdatera user.details.image-egenskapen.
Här är en enkel version av min node-server...
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'));
Finns det ett sätt att få det att skicka tillbaka det slutgiltiga filnamnet som multer sparade? Något i stil med res.json({fileName: fileName}); res.end(); Jag vet verkligen inte vid det här laget, och alla tutorials jag kan hitta om multer visar bara hur man skapar ett nytt filnamn och sparar en fil på disk, i databas eller i minne, men ingenstans visas hur man faktiskt kan få tillbaka det filnamnet till applikationen som laddade upp den. Tack på förhand för all hjälp, jag uppskattar det verkligen. Om du behöver se Ionic 2-koden som laddar upp sakerna, vänligen meddela mig så uppdaterar jag inlägget med den koden också. Tack.
Svar #1
Om du laddar upp en enskild fil kan du få filnamnet med req.file.filename
om du laddar upp flera filer req.files
När du har filnamnet kan du skicka det till klienten med res.send({filename:FileName});