Comment télécharger un fichier en utilisant multer ou body-parser
Je suis un NodeJS débutant, en suivant un livre "le Développement Web avec MongoDB et NodeJS". Je suis bloqué au chapitre 6 avec "multer'. Lorsque j'utilise multer pour l'upload de fichiers, le serveur lance le message d'erreur suivant:
/Users/fk / Documents / imageuploader / node_modules / express / lib / application.js: 209
throw new TypeError('app.use() requires middleware functions'); ^
TypeError: app.use() requires middleware functions
mais quand je le remplace par bodyParser le serveur s'allume mais quand je clique sur le bouton de téléchargement il me donne l'erreur suivante dans le navigateur.
500 TypeError: Cannot read property 'file' of undefined
Cependant, il est censé me diriger vers une autre page, où le fichier téléchargé est montré.
Voici mon bodyParser code, voir si je suis en utilisant correctement parce qu'il me donne "corps-analyseur obsolète" au démarrage du serveur. J'ai vu d'autres questions comme la mienne et je l'ai suivie, mais aucun d'entre eux fonctionnent vraiment.
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser({
uploadDir: path.join(__dirname, '../public/upload/temp')
}));
De code suivant montre comment j'ai utiliser multer, juste au cas où si il y a quelque chose que je ne devrais pas faire, s'il vous plaît laissez-moi savoir. Celui qui convient le mieux en cas de téléchargement de fichiers, le corps-analyseur ou multer?
app.use(multer({
dest: path.join(__dirname, '../public/upload/temp')
}));
var saveImage = function() {
var possible = 'abcdefghijklmnopqrstuvwxyz0123456789',
imgUrl = '';
for (var i = 0; i < 6; i += 1) {
imgUrl += possible.charAt(Math.floor(Math.random() * possible.length));
}
var tempPath = req.files.file.path,
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();
Précédent bloc de code est la logique que j'utilise pour télécharger le fichier. Dans l'erreur, il se réfère à "fichier" comme indéfini qui est dans la ligne suivante dans le saveImage fonction. Il est impossible d'obtenir le chemin d'accès et le jette donc l'erreur 500 selon la partie de la saveImage fonction. Pourquoi est - 'fichier' undefined ici? Je n'ai pas l'obtenir.
var tempPath = req.files.file.path,
source d'informationauteur Farooq Khan
Vous devez vous connecter pour publier un commentaire.
multer()
retourne un middleware générateur qui utilise les paramètres que vous avez spécifiés, de sorte que vous ne peut pas passer sa valeur de retour directement àapp.use()
. Vous pouvez voir tous les types de middleware elle peut générer de la la documentationmais en général, le générés middleware sont ajoutés au niveau de la route au lieu de à l'échelle mondiale, comme les autres corps d'analyseurs. C'est parce que vous aurez généralement passer le nom du fichier champ(s) qui vous attendent.Par exemple, c'est accepter un seul fichier (avec les non-champs de fichier) dont la forme nom de champ est
foo
:Aussi,
body-parser
ne dispose pas actuellement d'exporter unmultipart/form-data
capable de middleware, de sorte que vous ne pouvez utiliser ce module pour la manipulation de fichiers téléchargés (bien, court de passage d'une chaîne base64 dans unapplication/x-www-form-urlencoded
forme ou de quelque chose, mais c'est beaucoup moins efficace).Voici le code de base pour l'upload de fichier en MOYENNE s'il vous plaît vérifier
HTML
CÔTÉ CLIENT CODE
CÔTÉ SERVEUR CODE