javascript - returner filnavn på lastet opp fil med multer og nodejs
Jeg lager en enkel applikasjon som en læringserfaring med Ionic 2 som kobler til en Node-server som kjører Multer for å laste opp bilder. Problemet jeg støter på er at jeg trenger å få det endelige filnavnet fra Multer tilbake til appen som lastet den opp, for å lagre det lokalt. Jeg bruker Auth- og User-modulene fra @ionic/cloud-angular for autentisering og brukerinformasjon. User-objektet har et details-objekt med ting som "name", "email", "username", "image", ... Så, når et bilde lastes opp til Node-serveren og Multer lagrer det, trenger jeg å få det filnavnet tilbake til applikasjonen slik at jeg kan oppdatere user.details.image-egenskapen.
Her er en enkel versjon 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'));
Finnes det en måte å få den til å sende tilbake det endelige filnavnet som multer lagret? Noe sånt som res.json({fileName: fileName}); res.end(); Jeg vet virkelig ikke på dette punktet, og alle veiledningene jeg kan finne om multer viser bare hvordan man lager et nytt filnavn og lagrer en fil på disk, i database eller i minne, men ingen steder viser hvordan du faktisk kan få det filnavnet tilbake til applikasjonen som lastet det opp. Tusen takk på forhånd for all hjelp, jeg setter stor pris på det. Hvis du trenger å se Ionic 2-koden som laster opp filene, vennligst gi beskjed, så vil jeg oppdatere innlegget med den koden også. Tusen takk.
Svar #1
Hvis du laster opp en enkelt fil, kan du få filnavnet ved å bruke req.file.filename
hvis du laster opp flere filer req.files
Når du har filnavnet, kan du sende det til klienten ved å bruke res.send({filename:FileName});