【问题标题】:KeystoneJS file upload not working in my appKeystoneJS 文件上传在我的应用程序中不起作用
【发布时间】:2016-05-29 01:09:54
【问题描述】:

我们正在与使用 Keystonejs 0.3.16 的客户端合作,以提供将文件上传到服务器文件系统的可能性(不是来自 keystone admin ui)。乍一看,这似乎微不足道,我预计这将在不到一个小时内起作用。在一直工作到午夜之后,出于这样一个事实的动机,即一旦解决这个问题我会睡得更好,我不得不暂时辞职,事实上,我的梦想因此而不稳定。你一定是个极客,活下去!然而,我相信很多人都会知道这种感觉。 我现在求助于社区和 keystonejs 作者,帮助我了解我在这里缺少什么。

我正在使用最新版本的 keystones,并且我尝试了多个库来处理作为中间件组件的多部分格式文件上传。 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 以某种方式预处理 post 请求,这可以解释这种现象,例如。在文件内容到达我的中间件之前剥离文件内容?

这是我的基本形式:

<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 开发方面的某个人,可以帮助我理解这一点,或者更好地解决这个问题,我将非常感谢你的帮助,并且今晚一定会睡得更好;-)

【问题讨论】:

  • 提供的代码中的小修正,配置的路由当然是:app.post('/bo/lib/upload', upload.single('myimage'), function(req, res)
  • 你有没有解决这个问题?我正在努力将图像上传到 CloudinaryImage 字段。
  • 一点建议...如果您想回答您的问题,请不要写前言。人们不想阅读故事来回答您的问题。这可能会帮助您获得更多问题的答案。
  • 我想帮忙,但我不熟悉如何在本地上传。如果您使用的是 AWS 存储桶,我可能有一个解决方案。

标签: node.js file-upload keystonejs


【解决方案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") 的事件侦听器将永远不会输出。

【讨论】:

    猜你喜欢
    • 2018-06-13
    • 2018-02-26
    • 2018-07-19
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多