2015-10-17 2 views
1

Je veux utiliser multer pour télécharger des images avec l'express à partir d'un formulaire.A propos de l'utilisation de Multer (1.0.6) et Express pour télécharger des fichiers

Je trouve un post sur la façon d'utiliser multer pour télécharger un fichier, et déclenche des événements pour renommer le fichier. Dans la dernière instruction de github de multer, je pense que je dois utiliser disk storage engine pour télécharger les fichiers avec un nouveau nom, mais cela ne fonctionne pas. S'il vous plaît donnez-moi quelques instructions, j'ai essayé cette fonction toute la journée ...

En outre, je ne sais pas pourquoi res.status(204).end(); est nécessaire? II ne pas ajouter cette ligne, la page Web sera toujours verrouiller lorsque je clique sur le bouton de chargement ...

package.json

{ 
    "name": "FileUpload", 
    "version": "0.0.0", 
    "private": true, 
    "scripts": { 
    "start": "node ./bin/www" 
    }, 
    "dependencies": { 
    "body-parser": "~1.13.2", 
    "cookie-parser": "~1.3.5", 
    "debug": "~2.2.0", 
    "express": "~4.13.1", 
    "jade": "~1.11.0", 
    "morgan": "~1.6.1", 
    "multer": "^1.0.6", 
    "serve-favicon": "~2.3.0" 
    } 
} 

upload.js

var express = require('express'); 
var multer = require('multer'); 
var upload = multer({ storage: storage }); 

var app = express(); 

app.post('/uploadImage', upload.single('image'), function (req, res, next) { 
    console.log("success"); 
    console.log(req.file); 
    res.status(204).end(); 
}); 

app.get('/',function(req,res){ 
    console.log("It's work"); 
    res.sendFile(__dirname + "/index.html"); 
}); 

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
    console.log("Dest"); 
    cb(null, 'uploads/') 
    }, 
    filename: function (req, file, cb) { 
    cb(null, file.fieldname + '-' + Date.now()) 
    } 
}); 

app.listen(3000,function(){ 
    console.log("Working on port 3000"); 
}); 

index.html

<form id  = "uploadForm" 
    enctype = "multipart/form-data" 
    action = "/uploadImage" 
    method = "post" 
> 
<input type="file" name="image" /> 
<input type="submit" value="Upload Image" name="submit"> 
</form> 

Solution La raison pour laquelle mon code ne peut pas s'exécuter est l'ordre du code ... L'ordre suivant est correct.

var express = require('express'); 
var multer = require('multer'); 

var app = express(); 

app.get('/',function(req,res){ 
    console.log("It's work"); 
    res.sendFile(__dirname + "/index.html"); 
}); 

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
    console.log("Dest"); 
    cb(null, 'uploads/') 
    }, 
    filename: function (req, file, cb) { 
    cb(null, file.fieldname + '-' + Date.now()) 
    } 
}); 

var upload = multer({ storage: storage }); 

app.post('/uploadImage', upload.single('image'), function (req, res, next) { 
    console.log("success"); 
    console.log(req.file); 
    res.status(204).end(); 
}); 

app.listen(3000,function(){ 
    console.log("Working on port 3000"); 
}); 
+0

Comment retourner une erreur ou un message de réussite? –

Répondre

3

En GitHub, vous trouverez cet exemple et pour moi il travaille:

var express = require('express'); 
var multer = require('multer'); 
var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
    cb(null, '/tmp/my-uploads') 
    }, 
    filename: function (req, file, cb) { 
    cb(null, file.fieldname + '-' + Date.now()) 
    } 
}) 

var upload = multer({ storage: storage }) 

var app = express(); 

app.post('/uploadImage', upload.single('image'), function (req, res, next) { 
    console.log("success"); 
    console.log(req.file); 
    res.status(204).end(); 
}); 
+0

Merci de votre aide! J'ai trouvé la commande de mon code erronée ... – LoveTW

+0

Comment retourner une erreur ou un message de réussite? –

+0

@HardikMandankaa utiliser le rappel – AVI