2017-10-28 201 views
3

我的上传者遇到问题。我认为所有代码都是正确的,而且文件仍然不会在上传文件夹中创建。另外当我尝试console.log(req.files)我得到一个空数组。我尽量做到本地 下面是代码:快速上传不起作用

const express = require("express"), 
     app = express(), 
     multer = require("multer"), 
     bodyParser=require("body-parser"), 


app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 

var storage = multer.diskStorage({ 
    destination: function (req, file, callback) { 
     callback(null, './uploads/'); 
    }, 
    filename: function (req, file, callback) { 
     callback(null, file.fieldname + '-' + Date.now() + '.' + mime.extension(file.mimetype)); 
    } 
}); 

var upload = multer({ storage : storage }).array('userPic'); 

app.post("/postFormAct", isLoggedIn, function(req, res){ 
    upload(req,res,function(err) { 
     console.log(req.files); 
    }); 
}); 

也有我的方式:

<form method="post" action="/postFormAct" enctype="multipart/form-data"> 
    <input type="text" name="user"><br> 
    <input type="text" name="email"><br> 
    <input type="file" name="userPic"><br> 
    <input type="submit" value="Submit"> 
</form> 
+0

一旦我添加了缺少的依赖关系'mime'和'isLoggedIn',我的代码就可以用于我了,但我认为它们并不适合你。你有没有试过记录'err'来确认没有错误?你有没有尝试把日志记录到你的'destination'和'filename'函数中来查看它们是否被调用?它可能是一个文件系统权限问题?你有没有尝试过使用绝对路径而不是相对路径? – skirtle

+0

我试过记录,并没有任何错误。也许有一些错误的形式,因为我尝试每个解决方案,每次我得到一个空数组或未定义req.files – rafalos

+0

您的表单很不错,但只需添加另一个'
'在提交和检查之上。代码没有问题。我已经执行了你的代码并为我工作。只是为了测试目的删除isLoggedIn并执行代码。 –

回答

2

我认为你有问题,你的功能层次的中间件,你有isLoggedIn,你有在multer中间件upload后链右像这样:

// ... 
var upload = multer({ storage : storage }).array('userPic'); 

app.post("/postFormAct", isLoggedIn, upload, function(req, res){ 
    console.log(req.files) 
}); 

这里有一个完整的工作为例:

const app = require('express')() 
const bodyParser = require('body-parser') 
const multer = require('multer') 
const morgan = require('morgan') 

const storage = multer.diskStorage({ 
    destination: (req, file, cb) => { 
     cb(null, 'uploads') 
    }, 
    filename: (req, file, cb) => { 
     cb(null, file.fieldname + '-' + Date.now()) 
    } 
}) 

const upload = multer({ 
    storage: storage 
}) 

app.use(bodyParser.urlencoded({ extended: false })) 
app.use(bodyParser.json()) 
app.use(morgan('dev')) 

isLoggedIn = (req, res, next) => { 
    console.log('check if user is logged in') 
    next() 
} 

app.post('/uploads', isLoggedIn, upload.array('images'), (req, res) => { 
    console.log(req.files); 
    return res.send(req.files); 
}) 

app.listen(8000,() => { 
    console.log(`server is listenning on port 8000`) 
}) 

你可以找到一个测试版本库here

另外,还要确保您的目的地目录存在。

+0

我试图copypaste那个工作的例子,甚至这个代码没有把图像放在我的上传文件夹,当我尝试控制台日志req.files它仍然是一个空的数组 – rafalos

+0

我已更新我的代码,并添加了在GitHub上的例子。 – Sapher

+0

好的问题是其他模块阻止工作。现在它是固定的。感谢您的帮助 – rafalos

1

代替var upload = multer({ storage : storage }).array('userPic'); 使用

var upload = multer({ storage : storage }).any('userPic');

.ANY()

接受过来的电线中的所有文件。一组文件将被存储在req.files中。

+0

尝试过,仍然获得空阵列 – rafalos