2015-10-17 112 views
1

我想使用multer从窗体上传表达图像。关于使用Multer(1.0.6)和Express上传文件

我找到一个post关于如何使用multer上传文件,并触发事件来重命名文件。不过,我发现它只能在旧版本(multer-0.1.6)

在最新的指令multer的github,我想我必须使用disk storage engine上传与新名称的文件,但它不工作。请给我一些指示,我整天试过这个功能...

此外,我不知道为什么需要res.status(204).end();?二不要加入这一行,当我点击上传按钮,网页将始终锁定...

的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

相关问题