J'ai regardé beaucoup de réponses pour cette même question, mais je n'ai pas encore trouvé de solution de travail. J'essaie de faire une application web que vous pouvez télécharger des fichiers en utilisant express et multer, et j'ai un problème qu'aucun fichier n'est téléchargé et req.file est toujours indéfini.Node.js TypeError: Impossible de lire la propriété 'path' de undefined
Express et la version multer comme: "express": "^4.15.4", "multer": "^1.3.0"
Mon configure.js ressemble à ceci:
multer = require('multer');
module.exports = function(app) {
app.use(morgan('dev'));
app.use(multer({
dest: path.join(__dirname, 'public/upload/temp')}).single('file'));
routes(app);
app.use('/public/', express.static(path.join(__dirname, '../public')));
Code Consommant ressemble à ceci:
var tempPath = req.file.path,
ext = path.extname(req.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.'});
});
}
La forme ressemble à ceci:
<form method="post" action="/images" enctype="multipart/form-
data">
<div class="panel-body form-horizontal">
<div class="form-group col-md-12">
<label class="col-sm-2 control-label"
for="file">Browse:</label>
<div class="col-md-10">
<input class="form-control" type="file"
name="file" id="file">
</div>
</div>
Oui, vous avez raison le fichier n'est pas défini. Pouvez-vous suggérer ce qui me manque ici? – hemanik
Essayez de faire ce qui suit: console.log (JSON.stringify (req)) Ensuite, regardez l'objet, il peut vous aider. Je n'ai pas assez de choses pour vous dire ce qui ne va pas, mais si je devais vérifier les noms des attributs (peut-être que vous avez fait une faute de frappe ou l'attribut que vous recherchez), je définirais plusieurs console.log pour s'assurer que ce qui est recueilli/envoyé/reçu est vraiment ce que vous pensez qu'il est. Si vous ne trouvez toujours pas, téléchargez un exemple de travail (je veux dire un runnable;)) afin que nous puissions déboguer le code. –
Voici le code, https://github.com/hemanik/imgPloadr. C'est un exemple de ce [livre] (https://github.com/twang281314/frontEnd/blob/master/book/Web%20Development%20with%20MongoDB%20and%20NodeJS%2C%202nd%20Edition.pdf) – hemanik