2015-10-17 1 views
1

Я хочу использовать multer для загрузки изображений withe express из формы.Об использовании Multer (1.0.6) и Express для загрузки файлов

Я нашел post о том, как использовать multer для загрузки файла и запускать события для переименования файла. Тем не менее, я нашел, что он работает только в старой версии (multer-0.1.6)

В последней инструкции в multer's github, я думаю, мне нужно использовать disk storage engine для загрузки файлов с новым именем, однако это не работает. Пожалуйста, дайте мне несколько инструкций, я пробовал эту функцию целый день ...

Кроме того, я не уверен, почему нужен res.status(204).end();? II не добавить эту строку, веб-страница всегда будет запирать, когда я нажимаю кнопку загрузки ...

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> 

Решение Причина, по которой мой код не может быть выполнен, является заказом кода ... Следующий заказ является правильным.

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

Как вернуть ошибку или сообщение об успешном? –

ответ

3

В GitHub вы можете найти этот пример, и для меня это работает:

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

Спасибо вам за подсказку! Я обнаружил, что мой код неправильный ... – LoveTW

+0

Как вернуть сообщение об ошибке или успехе? –

+0

@HardikMandankaa использовать обратный вызов – AVI