KeystoneJS文件上传无法在我的应用

时间:2016-02-17 11:03:06

标签: node.js file-upload keystonejs

我们正在与一个使用Keystonejs 0.3.16的客户端合作,提供将文件上传到服务器文件系统的可能性(不是来自keystone admin ui)。第一手,这似乎微不足道,我预计这将在不到一个小时的时间内完成。在完成这项工作直到午夜之后,由于我的睡眠会更好,因此我必须暂时辞职,事实上,我的梦想因此而不稳定。多么极客你必须思考,过一个生命!然而,我相信很多人都会知道这种感觉。 我现在转向你们,社区和keystonejs的作者,帮助我理解我在这里缺少的东西。

我使用的是最新版本的基石,我尝试了多个库来处理多部分格式文件上传作为中间件组件。 Multer,强大,jfum,jquery-file-upload-middleware,connect-busboy,connect-multiparty ......我做了所有这些。一个甚至没有安装由于一些编译错误由于库不兼容,有些给了我500个错误告诉我req.status没有定义,所有其他人告诉我上传很顺利,但req.body和req.file保持不变空了,没有下载。

我甚至添加了一些日志记录到multer lib“makeMiddleware”,看看文件是否被解析,但是busboy.on(' file',...)事件永远不会被触发,表明没有文件存在在体内。

我还没有在基本的Nodejs Express服务器应用程序中尝试这个,只在keystone js应用程序上,所以也许keystone预处理发布请求以某种方式可以解释这种现象,例如。在文件内容到达我的中间件之前将其剥离?

这是我的基本形式:

<form method="post" role="form" enctype="multipart/form-data" action="/bo/lib/upload">
<input type="file" id="imageFileId" name=" imageFileName">
<input type="submit" value="Upload Image">
<form>

这里以我的例子使用Multer为例:

var upload = multer({ dest: './uploads/'});

exports = module.exports = function(app) {
    app.post('/', upload.single('myimage'), function(req, res){
        console.log(req.body) // returns empty ???
        console.log(req.file) // returns empty ???
        res.status(204).end()
    }]);
};

如果有人,也许是keystonejs开发方的人,可以帮助我理解这一点,甚至更好地解决这个问题,我会非常感谢你的帮助,并确保今晚睡得更好; - )

1 个答案:

答案 0 :(得分:1)

遇到同样的问题。 Keystone正在使用bodyParser解析req,然后才能到达./routes/index.js,在那里你有multer(或者我的情况下是busboy)试图解析请求。在./routes/index.js中停用app.use(bodyParser.json())app.use(bodyParser.urlencoded())无法解决问题。

如果您填充了console.log(req.body)这个事实就证实了这一点,但添加了一个在multer或busboy上调用console.log("Multer of busboy just parsed a file or field")的事件监听器将永远不会输出字段或文件。