Ich lerne nur node.js und habe Schwierigkeiten, einen einfachen Dateiupload mit Express und multer zu machen. HierNode.js TypeError: Kann Eigenschaft 'Datei' von undefined nicht lesen
ist die Form:
Bild hochladenIn meinem configure.js
ich habe:
app.use(express.static(path.join(__dirname, 'public')));
app.use(multer({dest:'../public/upload/temp'}).single('file'));
Und die image.js
Controller:
create: function(req, res) {
var saveImage = function() {
console.log(req.body);
var possible = 'abcdefghijklmnopqrstuvwxyz',
imgUrl = '';
for(var i=0; i < 6; i+=1) {
imgUrl += possible.charAt(Math.floor(Math.random() * possible.length));
}
var tempPath = req.files.file.path, //<line 55 error
ext = path.extname(req.files.file.name).toLowerCase(),
targetPath = path.resolve('./public/upload/' + imgUrl + ext);
if (ext === '.png' || ext === '.jpg' || ext === '.jpeg' || ext === '.gif') {
fs.rename(tempPath, targetPath, function(err) {
if (err) throw err;
res.redirect('/images/' + imgUrl);
});
} else {
fs.unlink(tempPath, function() {
if (err) throw err;
res.json(500, {error: 'Only image files are allowed.'});
});
}
};
saveImage();
},
Jedoch habe ich diesen Fehler, wenn ich versuche, ein Bild hochladen:
TypeError: Cannot read property 'file' of undefined
at saveImage (/home/pc/node-dev/test-proj/controllers/image.js:55:37)
at module.exports.create (/home/pc/node-dev/test-proj/controllers/image.js:76:9)
at Layer.handle [as handle_request] (/home/pc/node-dev/test-proj/node_modules/express/lib/router/layer.js:95:5)
at next (/home/pc/node-dev/test-proj/node_modules/express/lib/router/route.js:131:13)
at Route.dispatch (/home/pc/node-dev/test-proj/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/home/pc/node-dev/test-proj/node_modules/express/lib/router/layer.js:95:5)
at /home/pc/node-dev/test-proj/node_modules/express/lib/router/index.js:277:22
at Function.process_params (/home/pc/node-dev/test-proj/node_modules/express/lib/router/index.js:330:12)
at next (/home/pc/node-dev/test-proj/node_modules/express/lib/router/index.js:271:10)
at urlencodedParser (/home/pc/node-dev/test-proj/node_modules/body-parser/lib/types/urlencoded.js:95:37)
Und wenn ich log das req
Objekt ist file
nicht da:
{ title: 'myimage', description: 'something' }
Eigentlich ist das Snippet nur eine leicht modifizierte Version, die ich in this book gelesen habe, die veralteten Express-3 verwendet. Also im Grunde habe ich es nur mit dem multer
Teil aktualisiert.
Ich frage mich, was hier falsch ist und wie es zu beheben ist.
Haben Sie jemals eine praktikable Lösung mit Multer gefunden? Ich habe den unten aufgeführten Fix ausprobiert und es in req.file und req.path zu ändern scheint zu funktionieren, aber jetzt leitet das Beispiel aus dem Buch auf die/image/route um, ohne die Datei erfolgreich zu benennen oder zu empfangen. – Dave
Sie var tempPath = req.file.path; var ext = Pfad.Extname (req.file.originalname) .toLowerCase(); var targetPath = pfad.resolve ('./ public/upload /' + imgUrl + ext); – iansari